我有两个对象数组,想比较它们的名称和值。
const array1 = [
{
name: 'John',
value: null
},
{
name: 'Peter',
value: null
}
]
const array2 = [
{
name: 'John',
value: '0'
}
]
如果array1上存在属性name
array2,则将name的值更改为'0',否则不执行任何操作。
我期望的结果是:
[
{
"name": "John",
"value": "0"
},
{
"name": "Peter",
"value": null
]
谁能告诉我该怎么做?
答案 0 :(得分:1)
简单:
array1.forEach(record1 => {
array2.forEach(record2 => {
if (record1.name === record2.name) {
record1.value = "0";
}
});
});
答案 1 :(得分:1)
您可以为此使用两个forEach()
循环:
const array1 = [
{
name: 'John',
value: null
},
{
name: 'Peter',
value: null
},
{
name: 'Mike',
value: null
}
]
const array2 = [
{
name: 'John',
value: '0'
},
{
name: 'Mike',
value: '0'
}
]
array2.forEach((item2) => {
array1.forEach((item1) => {
if(item1.name === item2.name){
item1.value = item2.value;
}
});
});
console.log(array1);
答案 2 :(得分:1)
您也可以map
第一个数组并使用find
。
请注意,此版本的代码不会更改/更改array1
的内容。
const array1 = [
{
name: 'John',
value: null
},
{
name: 'Peter',
value: null
}
];
const array2 = [
{
name: 'John',
value: '0'
}
];
const result = array1.map(item1 => {
const newItem = {...item1}
if(array2.find(item2 => item2.name === item1.name)) {
newItem.value = 0;
}
return newItem;
});
console.log(result);
答案 3 :(得分:0)
非常简单:
您可以使用以下代码:
array2.forEach(
function(parent){
array1.find(function(child)
{
if(child.name==parent.name){
child.value=0;
}
})
}
);
答案 4 :(得分:0)
尝试一下:
const array1 = [
{
name: 'John',
value: null
},
{
name: 'Peter',
value: null
},
{
name: 'Mike',
value: null
}
]
const array2 = [
{
name: 'John',
value: '0'
},
{
name: 'Mike',
value: '0'
}
]
var array = array1.map(x=>{
if(array2.some(function (value) { return value.name === x.name })){
x.value = 0;
}
return x;
})