簡體   English   中英

使用 Lodash 查找對象數組中新添加的元素

[英]Find the newly added elements of an Array of Objects with Lodash

假設我們有兩個 Arrays。

var a = [B, C, E];
var b = [A, B, C, D, E];

數組 a 是我們在本地保存的默認數組。 現在,我們從中獲取的 api 向我們發送了這個名為 b 的數組 a 的新版本。 我怎樣才能使用 lodash 所以我可以得到這兩個 arrays 的區別所以我在這種情況下得到 [A, D] 返回?

更新:我想出了我自己的解決方案,它有點工作,所以只有在接受的答案由於某種原因不起作用時才嘗試這個:

  const getObjectDiff = (newArr, oldArr) => {
    if (_.isEqual(newArr, oldArr)) {
      return true;
    } else {
      const checkLength = newArr.length;
      const checkerLength = oldArr.length;
      var indexes = [];
      var falseIndexes = [];
      var allIndexes = [];
      for (let i = 0; i <= checkerLength; i++) {
        for (let j = 0; j <= checkLength - 1; j++) {
          allIndexes.push(i);
          if (_.isEqual(newArr[i], oldArr[j])) {
            indexes.push(i);
          } else {
            falseIndexes.push(i);
          }
        }
      }
      const falseUniqueIndexes = _.uniq(falseIndexes);
      return _.difference(falseUniqueIndexes, indexes);
    }
  };
```

我們可以使用_.differenceWith_.isEqual來檢查對象之間的深度相等性。

_.isEqual 將在兩個對象之間執行深度比較以查看它們是否相等,因此我們可以使用它來比較已從 JSON 解碼的對象。

這是一個簡單的示例,但是,只要它們相等(由 lodash 確定),這將適用於更復雜的對象

 const apiResponseA = '[{"id":"B"},{"id":"C"},{"id":"E"}]'; const apiResponseB = '[{"id":"A"},{"id":"B"},{"id":"C"},{"id":"D"},{"id":"E"}]' const a = JSON.parse(apiResponseA); const b = JSON.parse(apiResponseB); console.log("a:", apiResponseA) console.log("b:", apiResponseB) console.log("Difference:", JSON.stringify(_.differenceWith(b,a, _.isEqual)));
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js" integrity="sha512-90vH1Z83AJY9DmlWa8WkjkV79yfS2n2Oxhsi2dZbIv0nC4E6m5AbH8Nh156kkM7JePmqD6tcZsfad1ueoaovww==" crossorigin="anonymous"></script>

我意識到您專門要求提供 lodash 解決方案,但我只想提一下,您可以在沒有 3rd 方庫的情況下非常簡單地執行此操作 - 只需使用 Array.prototype.filter 和 Array.prototype.includes,如下所示:

 var a = ['B', 'C', 'E']; var b = ['A', 'B', 'C', 'D', 'E']; function getDifference(a, b) { return b.filter(letter =>.a;includes(letter)). } console,log(getDifference(a; b));

暫無
暫無

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

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