Javascript 比较两个具有键的对象数组,如果未找到,则将其添加到数组中

Javascript 比较两个具有键的对象数组,如果未找到,则将其添加到数组中,javascript,ecmascript-6,Javascript,Ecmascript 6,我希望将array1的id与array2的id进行比较,如果array1中缺少任何对象,则将其添加到该数组中。你能建议我怎么做吗 谢谢1-节省第一个数组的长度 2-遍历第二个数组项 3-如果id不存在或其索引大于数组长度,则将项推送到第一个数组 let array1=[{id:1,高度:178},{id:1,高度:176},{id:2,高度:168},{id:2,高度:164}],array2=[{id:1,高度:'},{id:1,高度:''},{id:2,高度:''},{id:2,高度:''

我希望将
array1
的id与
array2
的id进行比较,如果
array1
中缺少任何对象,则将其添加到该数组中。你能建议我怎么做吗


谢谢

1-节省第一个数组的长度

2-遍历第二个数组项

3-如果id不存在或其索引大于数组长度,则将项推送到第一个数组

let array1=[{id:1,高度:178},{id:1,高度:176},{id:2,高度:168},{id:2,高度:164}],array2=[{id:1,高度:'},{id:1,高度:''},{id:2,高度:''},{id:2,高度:''},{id:3,高度:''},{id:4,高度:'''},{,
阵列长度=阵列长度;
数组2.forEach(函数(itm){
let index=array1.findIndex(函数(it){
返回it.id==itm.id;
});

if(-1==索引| | arr1Length1-保存第一个数组的长度

2-遍历第二个数组项

3-如果id不存在或其索引大于数组长度,则将项推送到第一个数组

let array1=[{id:1,高度:178},{id:1,高度:176},{id:2,高度:168},{id:2,高度:164}],array2=[{id:1,高度:'},{id:1,高度:''},{id:2,高度:''},{id:2,高度:''},{id:3,高度:''},{id:4,高度:'''},{,
阵列长度=阵列长度;
数组2.forEach(函数(itm){
let index=array1.findIndex(函数(it){
返回it.id==itm.id;
});
如果(-1==索引| | arr1长度
  • 使用类似于
    Array.prototype.reduce()
  • array2
    中筛选出不在
    集合中的条目
  • array1
    与筛选结果连接起来
  • const数组1=[{id:1,高度:178},{id:1,高度:176},{id:2,高度:168},{id:2,高度:164}]
    常量数组2=[{id:1,高度:'},{id:1,高度:'},{id:2,高度:'},{id:2,高度:'},{id:3,高度:'},{id:3,高度:'},{id:4,高度:'},{id:4,高度:''}]
    //步骤#1
    const knownIds=array1.reduce((set,{id})=>set.add(id),new set())
    //步骤2和3
    const resultArray=array1.concat(array2.filter(({id})=>!knownIds.has(id)))
    控制台信息(resultArray)
  • 使用类似于
    Array.prototype.reduce()
  • array2
    中筛选出不在
    集合中的条目
  • array1
    与筛选结果连接起来
  • const数组1=[{id:1,高度:178},{id:1,高度:176},{id:2,高度:168},{id:2,高度:164}]
    常量数组2=[{id:1,高度:'},{id:1,高度:'},{id:2,高度:'},{id:2,高度:'},{id:3,高度:'},{id:3,高度:'},{id:4,高度:'},{id:4,高度:''}]
    //步骤#1
    const knownIds=array1.reduce((set,{id})=>set.add(id),new set())
    //步骤2和3
    const resultArray=array1.concat(array2.filter(({id})=>!knownIds.has(id)))
    
    console.info(resultArray)
    我建议使用一组
    array1
    的键进行快速查找。请注意,这会改变
    array1

    const数组1=[{id:1,高度:178},{id:1,高度:176},{id:2,高度:168},{id:2,高度:164}]
    常量数组2=[{id:1,高度:'},{id:1,高度:'},{id:2,高度:'},{id:2,高度:'},{id:3,高度:'},{id:3,高度:'},{id:4,高度:'},{id:4,高度:''}]
    const id=新集合(array1.map(e=>e.id));
    array2.forEach(e=>{
    如果(!id.has(e.id)){
    阵列1.推送(e);
    }
    });
    
    console.log(array1);
    我建议使用一组
    array1
    的键进行快速查找。请注意,这会改变
    array1

    const数组1=[{id:1,高度:178},{id:1,高度:176},{id:2,高度:168},{id:2,高度:164}]
    常量数组2=[{id:1,高度:'},{id:1,高度:'},{id:2,高度:'},{id:2,高度:'},{id:3,高度:'},{id:3,高度:'},{id:4,高度:'},{id:4,高度:''}]
    const id=新集合(array1.map(e=>e.id));
    array2.forEach(e=>{
    如果(!id.has(e.id)){
    阵列1.推送(e);
    }
    });
    
    控制台日志(array1)
    您想增量添加还是一次添加全部?我只是问,因为只要您添加一个,比如说
    id:3
    ,那么
    array1
    将包含该
    id
    ,这样您就不会一次添加更多可能的重复项,因为我将映射此resultArray以呈现表。我希望得到结果数组数组2中所有缺少的键,即使它们是重复的。你想增量添加它们还是一次添加所有键?我只是问,因为只要你添加一个,比如说
    id:3
    ,那么
    array1
    将包含该
    id
    ,这样你就不会一次添加更多可能的重复项,因为我要映射这个结果y来渲染表。我希望得到数组2中所有缺失键的结果数组,即使它们是重复的。很好!我感觉有一种比使用
    reduce()更好的方法来构建
    Great!!这就是我要找的。非常适合我。非常感谢!我感觉有一种比使用
    reduce()
    更好的方法来构建
    集。
    Great!!这就是我要找的。非常适合我。非常感谢
    array1 =  [
        {id: 1, height: 178}, {id: 1, height: 176},
        {id: 2, height: 168},{id: 2, height: 164}
    ]
    
    array2 =  [
        {id: 1, height: ''},{id: 1, height: ''},
        {id: 2, height: ''},{id: 2, height: ''}, 
        {id: 3, height: ''}, {id: 3, height: ''}, 
        {id: 4, height: ''}, {id: 4, height: ''}
    ]
    
    resultArray  = [
        {id: 1, height: 178},{id: 1, height: 176},
        {id: 2, height: 168},{id: 2, height: 164}, 
        {id: 3, height:''}, {id: 3, height: ''}, 
        {id: 4, height: ''}, {id: 4, height: ''}
    ]