基于JavaScript中的另一个列表更新列表

基于JavaScript中的另一个列表更新列表,javascript,arrays,json,object,Javascript,Arrays,Json,Object,如何基于另一个阵列更新阵列 这就是我试图做到的: var ref=[ { “姓名”:“杰克”, “职务”:“经理”, “说明”:“, }, { “姓名”:“史蒂夫”, “职务”:“首席执行官”, “描述”:“测试描述”, } ]; 变量元素=[ { “姓名”:“杰克”, “职务”:“经理”, “说明”:“, }, { “姓名”:“史蒂夫”, “职务”:“首席执行官”, “描述”:“测试描述”, } ]; 对于(变量i=0;iref 如果您的识别键是其他键,如组合名称和标题,则调整上一个映射(

如何基于另一个阵列更新阵列

这就是我试图做到的:


var ref=[
{
“姓名”:“杰克”,
“职务”:“经理”,
“说明”:“,
},
{
“姓名”:“史蒂夫”,
“职务”:“首席执行官”,
“描述”:“测试描述”,
}
];
变量元素=[
{
“姓名”:“杰克”,
“职务”:“经理”,
“说明”:“,
},
{
“姓名”:“史蒂夫”,
“职务”:“首席执行官”,
“描述”:“测试描述”,
}
];
对于(变量i=0;i控制台日志(elem)最好在
elem
上运行循环。此外,您无法比较这样的对象,因为引用将不同,因此您必须进行深入检查,类似这样的操作应该可以:


var ref=[
{
“姓名”:“杰克”,
“职务”:“经理”,
“说明”:“,
},
{
“姓名”:“史蒂夫”,
“职务”:“首席执行官”,
“描述”:“测试描述”,
}
];
变量元素=[
{
“姓名”:“杰克”,
“职务”:“经理”,
“说明”:“,
},
{
“姓名”:“史蒂夫”,
“职务”:“首席执行官”,
“描述”:“测试描述”,
}
];
对于(变量i=0;i对于(var j=0;j,最好在
elem
上运行循环。此外,您不能比较这样的对象,因为引用将不同,因此您必须进行深入检查,类似这样的操作应该可以:


var ref=[
{
“姓名”:“杰克”,
“职务”:“经理”,
“说明”:“,
},
{
“姓名”:“史蒂夫”,
“职务”:“首席执行官”,
“描述”:“测试描述”,
}
];
变量元素=[
{
“姓名”:“杰克”,
“职务”:“经理”,
“说明”:“,
},
{
“姓名”:“史蒂夫”,
“职务”:“首席执行官”,
“描述”:“测试描述”,
}
];
对于(变量i=0;i对于(var j=0;j避免嵌套循环),您可以使用<>代码> REF中的每一个密钥来构建<代码> SET/CODE >。假设您认为名称是识别密钥,那么它将是这样的:

ref = ref.concat(elem.filter(function (o) {
    return !this.has(o.name)
}, new Set(ref.map(o => o.name))));
因此,这将通过获取
ref
中的所有名称来构建
集合
,将其作为
this
传递给
过滤器
回调,该回调检查每个
元素
条目是否在集合中有
名称
。如果是这样,它将被
过滤器
排除。此过滤结果将连接到
>ref

如果您的识别键是其他键,如组合
名称
标题
,则调整上一个
映射(……)
中使用的函数,并应用
has()
中相同的逻辑

这里有一个fiddle(样本数据略有不同),它使用
名称
标题
的组合作为识别键:

var ref=[{
“姓名”:“杰克”,
“职务”:“经理”,
“说明”:“,
}, {
“姓名”:“史蒂夫”,
“职务”:“首席执行官”,
“描述”:“测试描述”,
}];
变量元素=[{
“姓名”:“杰克”,
“职务”:“经理”,
“说明”:“,
}, {
“姓名”:“史蒂夫”,
“标题”:“程序员”,
“描述”:“Java瘾君子”,
}];
ref=ref.concat(滤芯)(功能(o){
return!this.has(JSON.stringify([o.name,o.title]))
},新的集合(ref.map(o=>JSON.stringify([o.name,o.title]))));
console.log(ref);

<控制台包装> {最大高度:100%!重要;顶部:0;}

避免嵌套循环,你可以用<代码> REF中的每一个密钥来构建<代码> >代码>代码。

ref = ref.concat(elem.filter(function (o) {
    return !this.has(o.name)
}, new Set(ref.map(o => o.name))));
因此,这将通过获取
ref
中的所有名称来构建
集合
,将其作为
this
传递给
过滤器
回调,该回调检查每个
元素
条目是否在集合中有
名称
。如果是这样,它将被
过滤器
排除。此过滤结果将连接到
>ref

如果您的识别键是其他键,如组合
名称
标题
,则调整上一个
映射(……)
中使用的函数,并应用
has()
中相同的逻辑

这里有一个fiddle(样本数据略有不同),它使用
名称
标题
的组合作为识别键:

var ref=[{
“姓名”:“杰克”,
“职务”:“经理”,
“说明”:“,
}, {
“姓名”:“史蒂夫”,
“职务”:“首席执行官”,
“描述”:“测试描述”,
}];
变量元素=[{
“姓名”:“杰克”,
“职务”:“经理”,
“说明”:“,
}, {
“姓名”:“史蒂夫”,
“标题”:“程序员”,
“描述”:“Java瘾君子”,
}];
ref=ref.concat(滤芯)(功能(o){
return!this.has(JSON.stringify([o.name,o.title]))
},新的集合(ref.map(o=>JSON.stringify([o.name,o.title]))));
console.log(ref);

.as console wrapper{max height:100%!important;top:0;}
所以您的两个输入数组是相同的,您想修改什么?您没有正确地比较对象。虽然对象的内容可能相同,但您可能有不同的引用。比较以及索引使用引用比较。如果有两个,会发生什么“杰克”,有相同的“头衔”",但描述稍有不同?换句话说,每个条目的主键是什么?因此,您的两个输入数组是相同的,您想修改什么?您没有正确比较对象。虽然对象的内容可能相同,但您可能有不同的引用。比较以及索引使用引用比较。什么如果您有两个“杰克”,具有相同的“头衔”,但在de中略有不同,则会发生这种情况