簡體   English   中英

數組對象的javascript迭代邏輯XOR?

[英]javascript iterative logical XOR for array of objects?

我有一個循環2個Feature對象數組並檢查每個Feature的active屬性是否已更改的函數。 到目前為止,我有這個:

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)代碼不起作用,有一個邏輯錯誤我似乎無法解決。 更改單個功能部件的激活狀態后,該功能將輸出changes為“已激活”功能部件的一半的陣列。 注意在運行函數之前,我斷言兩個輸入數組包含正確的對象和屬性值。

B)是否有更快的內置函數可以簡化這些if語句的過程?

對javascript來說相對較新,因此任何想法都會受到贊賞,謝謝

有沒有更快的方法可以簡化這些if語句的過程?

當然,只寫一個語句

if (feature.active != originalFeatures[index].active) {
    return changes.push({
        name: feature.name,
        change: feature.active ? 'Activated' : 'Deactivated'
    });
}

您也可以使用實際的XOR運算符^但是由於我們在這里使用布爾值,因此我更喜歡!=

我更喜歡使用Array.prototype.mapArray.prototype.filterArray.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;
 }, []);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM