对象数组的javascript迭代逻辑异或?
我有一个函数,可以在两个要素对象数组上循环,并检查每个要素的对象数组的javascript迭代逻辑异或?,javascript,reactjs,logic,Javascript,Reactjs,Logic,我有一个函数,可以在两个要素对象数组上循环,并检查每个要素的活动属性是否已更改。到目前为止,我有: const changes = []; let index = 0; features.forEach((feature) => { if (feature.active && !originalFeatures[index].active) { return changes.push({ name: feature.name, change: 'Activ
活动属性是否已更改。到目前为止,我有:
const changes = [];
let index = 0;
features.forEach((feature) => {
if (feature.active && !originalFeatures[index].active) {
return changes.push({ name: feature.name, change: 'Activated' });
}
if (!feature.active && originalFeatures[index].active) {
return changes.push({ name: feature.name, change: 'Deactivated' });
}
index += 1;
});
A) 代码不起作用,有一个逻辑错误我似乎无法破解。更改单个功能的激活状态后,功能输出<代码>更改代码>为“激活”功能的一半阵列。注意:在函数运行之前,我断言两个输入数组包含正确的对象和属性值
B) 是否有一个更快的内置函数可以简化这些if语句的过程
我对javascript比较陌生,所以如果您有任何想法,我将不胜感激,谢谢
是否有一种更快的方法可以简化这些if语句的过程
当然,只要写一句话
if (feature.active != originalFeatures[index].active) {
return changes.push({
name: feature.name,
change: feature.active ? 'Activated' : 'Deactivated'
});
}
您也可以使用实际的异或运算符^
,但因为我们在这里使用布尔运算,所以我更喜欢=
我更喜欢使用Array.prototype.map
、Array.prototype.filter
和Array.prototype.reduce
而不是Array.prototype.forEach
未经测试:
const changes = features.reduce((filtered, feature, index) => {
if (feature.active ^ originalFeatures[index].active) {
filtered.push({ name: feature.name, change: (feature.active) ? 'Activated' : 'Deactivated' }})
}
return filtered;
}, []);
你只是偶尔增加了索引
,。。但是forEach
有一个索引属性,您无论如何都可以使用forEach((功能,索引)=>{
您甚至不需要索引
var.@Keith感谢mate解决了这个问题。