如何在JavaScript中比较和更改对象值的数组

时间:2018-07-24 11:41:09

标签: javascript arrays

我有两个对象数组,想比较它们的名称和值。

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
]

谁能告诉我该怎么做?

5 个答案:

答案 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;
})