Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 比较两个对象数组并更新主数组-JS中的元素_Javascript_Arrays - Fatal编程技术网

Javascript 比较两个对象数组并更新主数组-JS中的元素

Javascript 比较两个对象数组并更新主数组-JS中的元素,javascript,arrays,Javascript,Arrays,我有一个对象数组(主数组)和一个过滤列表。它们具有一个值为true的选定属性。我需要比较这两个属性,如果另一个数组中不存在所选属性,则将其更新为false 这是我的实现 const数据=[{ 颜色:“红色”, 值:“f00”, 所选:真 }, { 颜色:“绿色”, 值:“0f0”, 所选:真 }, { 颜色:“蓝色”, 值:“00f”, 所选:真 }, { 颜色:“青色”, 值:“0ff”, 所选:真 }, { 颜色:“洋红色”, 值:“f0f”, 所选:真 }, { 颜色:“黄色”, 值:“

我有一个对象数组(主数组)和一个过滤列表。它们具有一个值为true的选定属性。我需要比较这两个属性,如果另一个数组中不存在所选属性,则将其更新为false

这是我的实现

const数据=[{
颜色:“红色”,
值:“f00”,
所选:真
},
{
颜色:“绿色”,
值:“0f0”,
所选:真
},
{
颜色:“蓝色”,
值:“00f”,
所选:真
},
{
颜色:“青色”,
值:“0ff”,
所选:真
},
{
颜色:“洋红色”,
值:“f0f”,
所选:真
},
{
颜色:“黄色”,
值:“#ff0”,
所选:真
},
{
颜色:“黑色”,
值:“000”,
所选:真
}
]
常数筛选=[{
颜色:“洋红色”,
值:“f0f”,
所选:真
}, {
颜色:“绿色”,
值:“0f0”,
所选:真
}, {
颜色:“黑色”,
值:“000”,
所选:真
}]
data.forEach(项=>{
for(过滤中的var键){
if(已筛选的[键]['value']==项.value){
item.selected=false
}
}
})

console.log(data)
您可以创建一个包含筛选数组中的值的数组,然后遍历主数据数组,查看各个项目是否包含筛选数组中的值:

const filteredValues = filtered.map(item => item.value);
data.forEach(item => {
  item.selected = filteredValues.includes(item.value);
});
这种方法的优点是不用进行嵌套迭代(基本上是
O(n^2)
complexity)

const数据=[{
颜色:“红色”,
值:“f00”,
所选:真
},
{
颜色:“绿色”,
值:“0f0”,
所选:真
},
{
颜色:“蓝色”,
值:“00f”,
所选:真
},
{
颜色:“青色”,
值:“0ff”,
所选:真
},
{
颜色:“洋红色”,
值:“f0f”,
所选:真
},
{
颜色:“黄色”,
值:“#ff0”,
所选:真
},
{
颜色:“黑色”,
值:“000”,
所选:真
}
]
常数筛选=[{
颜色:“洋红色”,
值:“f0f”,
所选:真
}, {
颜色:“绿色”,
值:“0f0”,
所选:真
}, {
颜色:“黑色”,
值:“000”,
所选:真
}]
常量filteredValues=filtered.map(item=>item.value);
data.forEach(项=>{
item.selected=FilteredValue.includes(item.value);
})

console.log(数据)
如何添加
foreach
并使用
过滤的
数组检查
,如下所示:
const数据=[{
颜色:“红色”,
值:“f00”,
所选:真
},
{
颜色:“绿色”,
值:“0f0”,
所选:真
},
{
颜色:“蓝色”,
值:“00f”,
所选:真
},
{
颜色:“青色”,
值:“0ff”,
所选:真
},
{
颜色:“洋红色”,
值:“f0f”,
所选:真
},
{
颜色:“黄色”,
值:“#ff0”,
所选:真
},
{
颜色:“黑色”,
值:“000”,
所选:真
}
]
常数筛选=[{
颜色:“洋红色”,
值:“f0f”,
所选:真
}, {
颜色:“绿色”,
值:“0f0”,
所选:真
}, {
颜色:“黑色”,
值:“000”,
所选:真
}];
变量filteredData=[];
data.forEach(项=>{
var=0;
filtered.forEach(filterItem=>{
if(item.value==filterItem.value){
isSelected=1;
}
});
如果(isSelected==0){
item.selected=false;
}
过滤数据推送(项目);
});

console.log(filteredData)
根据您的要求,一旦找到匹配项,您应该将所选值设置为true。那么你应该打破这个循环。此外,如果数据列表中的对象不在筛选列表中,则应将其“选定对象”设置为false

const数据=[{
颜色:“红色”,
值:“f00”,
所选:真
},
{
颜色:“绿色”,
值:“0f0”,
所选:真
},
{
颜色:“蓝色”,
值:“00f”,
所选:真
},
{
颜色:“青色”,
值:“0ff”,
所选:真
},
{
颜色:“洋红色”,
值:“f0f”,
所选:真
},
{
颜色:“黄色”,
值:“#ff0”,
所选:真
},
{
颜色:“黑色”,
值:“000”,
所选:真
}
]
常数筛选=[{
颜色:“洋红色”,
值:“f0f”,
所选:真
}, {
颜色:“绿色”,
值:“0f0”,
所选:真
}, {
颜色:“黑色”,
值:“000”,
所选:真
}]
data.forEach(项=>{
for(过滤中的var键){
if(已筛选的[键]['value']==项.value){
item.selected=true;
打破
}
否则{
item.selected=false;
}
}
})

console.log(数据)
您打算基于
进行比较,还是基于
颜色
的组合进行比较?在我的确切场景中,它将基于id,但我仅针对此数据使用了值Hey Terry,对于筛选列表中的所有一,我需要为true,对于筛选列表中不存在的所有一,我需要为false。@a2441918我的错。更新了我的答案;)