代码之家  ›  专栏  ›  技术社区  ›  Ras

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

  •  -4
  • Ras  · 技术社区  · 6 年前

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

    const array1 = [
      {
        name: 'John',
        value: null
      },
      {
        name: 'Peter',
        value: null
      }
    ]
    
    const array2 = [
      {
        name: 'John',
        value: '0'
      }
    ]
    

    中频特性 name array2存在于array1上,然后用“0”更改名称的值,否则不执行任何操作。

    我期望的结果是:

    [
      {
        "name": "John",
        "value": "0"
      },
      {
        "name": "Peter",
        "value": null
    ]
    

    有人能告诉我怎么做吗?

    5 回复  |  直到 6 年前
        1
  •  1
  •   Ankit Agarwal    6 年前

    你可以用两个 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
  •   SoroushNeshat    6 年前

    其简单:

    array1.forEach(record1 => {
      array2.forEach(record2 => {
        if (record1.name === record2.name) {
          record1.value = "0";
        }
      });
    });
    
        3
  •  1
  •   sjahan    6 年前

    你也可以 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);
        4
  •  0
  •   Deepak Kumar    6 年前

    很简单:

    您可以使用以下代码:

    array2.forEach(
                    function(parent){
    
                        array1.find(function(child)
                        {
                            if(child.name==parent.name){
                                child.value=0;
    
                            }
                        })
    
                        }
    
    );
    
        5
  •  0
  •   Harun Or Rashid    6 年前

    试试这个:

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