簡體   English   中英

使用_.differenceBy從另一個對象數組中刪除一個對象數組中的項

[英]Remove items from one array of objects from another array of objects with _.differenceBy

我有兩個對象數組:

var defendantList = [
  {
    label: "Joe BLow"
    value: "Joe Blow"
  },
  {
    label: "Sam Snead"
    value: "Sam Snead"
  },
  {
    label: "John Smith"
    value: "John Smith"
  },
];

var dismissedDefendants = [
  {
    date: 'someDateString',
    value: "Joe Blow"
  },
  {
    date: "someOtherDateString",
    value: "Sam Snead"
  }
];

我需要創建一個數組,其中包含被告列表中未包含的被告列表中的值。 如何使用lodash或標准JS數組函數簡單地做到這一點? 我正在查看lodash的_.differenceBy ,因為它具有iteratee,但是我不太清楚該怎么做。

UPDATE :此示例中所需的最終結果只是具有不匹配對象的數組:

  var newArray = [
      {
        label: "John Smith"
        value: "John Smith"
      },
    ];

謝謝。

使用_.differenceBy()

_.differenceBy(defendantList, dismissedDefendants, 'value');

 var defendantList = [ { label: "Joe BLow", value: "Joe Blow" }, { label: "Sam Snead", value: "Sam Snead" }, { label: "John Smith", value: "John Smith" }, ]; var dismissedDefendants = [ { date: 'someDateString', value: "Joe Blow" }, { date: "someOtherDateString", value: "Sam Snead" } ]; var result = _.differenceBy(defendantList, dismissedDefendants, 'value'); console.log(result); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.2/lodash.min.js"></script> 

還有一個基於Array.prototype.filter()Set的ES6解決方案:

defendantList.filter(function({ value }) { 
  return !this.has(value); // keep if value is not in the Set
}, new Set(dismissedDefendants.map(({ value }) => value))); //create a Set of unique values in dismissedDefendants and assign it to this

 var defendantList = [ { label: "Joe BLow", value: "Joe Blow" }, { label: "Sam Snead", value: "Sam Snead" }, { label: "John Smith", value: "John Smith" }, ]; var dismissedDefendants = [ { date: 'someDateString', value: "Joe Blow" }, { date: "someOtherDateString", value: "Sam Snead" } ]; var result = defendantList.filter(function({ value }) { return !this.has(value); }, new Set(dismissedDefendants.map(({ value }) => value))); console.log(result); 

這是使用純Javascript的簡單解決方案。 希望能幫助到你!

 var defendantList = [ { label: "Joe BLow", value: "Joe Blow" }, { label: "Sam Snead", value: "Sam Snead" }, { label: "John Smith", value: "John Smith" }, ]; var dismissedDefendants = [ { date: 'someDateString', value: "Joe Blow" }, { date: "someOtherDateString", value: "Sam Snead" } ]; for(var i in defendantList){ for(var j in dismissedDefendants){ if(defendantList[i].value === dismissedDefendants[j].value){ var index = defendantList.indexOf(defendantList[i]); if (index > -1) { defendantList.splice(index, 1); } } } } console.log(defendantList); 

暫無
暫無

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

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