Hello Developer, Hope you guys are doing great. Today at Tutorial Guruji Official website, we are sharing the answer of Insert element inside array without wasting too much if your time.
The question is published on by Tutorial Guruji team.
The question is published on by Tutorial Guruji team.
I have a function
checkName(output) { output.filter((NewData) => { return this.props.elements.filter((OldData) => { if (NewData.key == OldData.key) { NewData.name = OldData.name, //there i need to add another element // Need to add newData.number = OldData.number } return NewData }) }) return output }
and I call this function like:
const named = this.checkName(product.rows)
Now I need to add to my product’s array that I passed to checkName the value “OldData.Number” to “newData.Number” that is not defined in product (so I need to create this field)
For example:
Product before the checkName function
product.rows = [NewData.name]
Product after the checkName function
product.rows = [NewData.name="value of OldData.name", NewData.number="value of OldData.number"]
How can I obtain this result?
Answer
There are 2 confusing things in your code:
- You are using
filter
to execute an action in each member of theoutput
array. However, filter should be used to… well, filter that array, meaning that is should not modify it, just return a sub-set of it. Instead, you might want to use forEach. However, taking into accound the next bullet, probably you want to use map. - You are modifying the array passed to the
checkName
function. This is confusing and can lead to hard-to-find bugs. Instead, make your function “pure”, meaning that it should not mutate its inputs, instead just return the data you need from it.
I would suggest some implementation like this one:
checkName(output){ return output.map((NewData) => { // find the old data item corresponding to the current NewData const OldData = this.props.elements.find(x => x.key === NewData.key); if (OldData) { // If found, return a clone of the new data with the old data name // This uses the spread syntax: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax return { ...NewData, // Clone the NewData object name: OldData.name, // set the value found in OldData.name in the "name" field of the cloned object number: OldData.number, // You can do the same for each field for which you want to replace the value cloned from NewValue }; } else { // Otherwise, just return a clone of the NewData return { ...NewData }; } } }
The usage would be like this:
const named = this.checkName(product.rows)
Be aware that the product.rows
array won’t be modified!
We are here to answer your question about Insert element inside array - If you find the proper solution, please don't forgot to share this with your team members.