簡體   English   中英

如何使用 Lodash 從基於另一個數組的數組中刪除對象?

[英]How to remove an object from an array based on another array with Lodash?

我正在嘗試編輯基於另一個數組的對象數組。

例如,這是我的對象數組:

var objs = [{ 
   attending: 0, user: '123' 
}, { 
   attending: 0, user: '456' 
}, { 
   attending: 0, user: '789' 
}];

這是我的數組:

var arr = ['945', '456']

由於456存在於arr ,我想從obj刪除該對象。 因此是最終結果:

var objs = [{ 
   attending: 0, user: '123' 
}, { 
   attending: 0, user: '789' 
}];

我已經嘗試了omitpullByAll但沒有運氣:

var newObj = _.omit(obj, arr);
var newObj = _.pullAllBy(obj, arr, 'user');

使用Lodash最好的方法是什么? 我知道為此創建一個 Javascript 函數會非常簡單,盡管我的應用程序需要經常執行此操作,因此擁有一個可訪問的簡單 Lodash 函數會很好。

您可以使用本機 js 方法來做到這一點。

var newObj = objs.filter(function(obj) {
  return arr.indexOf(obj.user) != -1
});

如果您使用的是 ES6,那就更簡單了

var newObj = objs.filter(obj => arr.indexOf(obj.user) != -1);

這個視頻很好地解釋了這個概念。

正如所問,這是在 lodash 中:

var newObj = _.filter(objs, function(obj) {
  return _.indexOf(arr, obj.user) !== -1;
});

我們可以爭論純 js 與 lodash 直到奶牛回家,但 1) 問題要求使用 lodash,2) 如果 objs 或 arr 為空,純 js 答案將拋出錯誤。

使用普通的 JS 這將起作用:

var newObj = objs.filter(function(obj) {
   return arr.indexOf(obj.user) !== -1
})

我能夠通過結合forEach()remove()來解決這個問題

_(obj).forEach(function(value) {
    _.remove(arr, {
        user: value
    });
});

您可以通過使用過濾器包含數組的方法來實現這一點。

const array = (objs).filter((obj) => !arr.includes(obj.user))

暫無
暫無

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

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