[英]Insert element inside array
我有一个 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
}
我称之为 function 就像:
const named = this.checkName(product.rows)
现在我需要将值“OldData.Number”添加到产品中未定义的“newData.Number”到我传递给 checkName 的产品数组中(因此我需要创建此字段)
例如:
核对前产品名称 function
product.rows = [NewData.name]
核对后的产品名称 function
product.rows = [NewData.name="value of OldData.name", NewData.number="value of OldData.number"]
我怎样才能得到这个结果?
您的代码中有两件令人困惑的事情:
filter
在output
数组的每个成员中执行操作。 但是,过滤器应该用于......好吧,过滤那个数组,这意味着不应该修改它,只返回它的一个子集。 相反,您可能想要使用forEach 。 但是,考虑到下一个项目符号,您可能想使用map 。checkName
function 的数组。 这令人困惑,并可能导致难以发现的错误。 相反,让你的 function “纯”,这意味着它不应该改变它的输入,而只是从它返回你需要的数据。我会建议一些像这样的实现:
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 };
}
}
}
用法是这样的:
const named = this.checkName(product.rows)
请注意product.rows
数组不会被修改!
您可以获取旧 object 的键和值。
const keys = Object.keys(oldObject);
const values = Object.values(oldObject);
// or
const [keys, values] = Object.entries(oldObject);
之后,您将使用 oldObject 的所有键创建一个循环,并像数组一样插入 newObject。
keys.forEach( (key, index) => newObject[key] = values[index]);
// or
for (const [key, value] of Object.entries(object1)) {
newObject[key] = value
}
像这样使用 map。
checkName(output){
return output.map(( NewData) =>{
this.props.elements.forEach((OldData) => {
if (NewData.key == OldData.key) {
NewData.name = OldData.name;
NewData.number = OldData.number;
}
})
return NewData;
})
// return output;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.