Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.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迭代逻辑异或?_Javascript_Reactjs_Logic - Fatal编程技术网

对象数组的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解决了这个问题。