如何使用下划线提取基于 id 的对象

how to pluck objects based on ids using underscore

我有一个数组,里面有一堆 id

var arr = ["562f464a9cdf7e6e33aa2514","562f464a9cdf7e6e33aa2514"];

我有一个看起来有点像这样的对象数组

[{
    "boatId": "562f464a9cdf7e6e33aa2514",
        "canPoll": true,
}, {
    "boatId": "562f4647e6e33aa2514",
        "canPoll": true,
}]

我想从第二个列表中取出id不在数组中的对象arr

我想到了下面这行,但它 returns false;

var finalBoats = _.map(boats, function (boat) {
    if (originalBoats.length > 0) {
        _.each(originalBoats, function (originalBoat) {
            if (originalBoat === boat.boatId) {
                return boat;
            }
        });
    } else {
        return boat;
    }
});

我还必须考虑第一个数组可能为空的时间。

不确定如何在下划线中执行此操作。

更新:这正是我想要做的

var arr = ["1","2"];

   var unfilteredBoats = [{
        "boatId": "3",
            "canPoll": true,
    }, {
        "boatId": "2",
            "canPoll": true,
    }]

所以提取的元素数组应该是

[{
        "boatId": "3",
            "canPoll": true,
    }]

此外,如果 arr 为空,则根本不应该过滤,那部分相当简单。

您可以在 VanillaJS

中使用 filter
var filteredArr = originalBoats.filter(function(e) {
    return arr.indexOf(e.boatId) === -1;
});

同样可以使用下划线 filter and contains

var filteredArr = _.filter(originalBoats, function(el) {
    return _.contains(arr, el.boatId) === false;
});

演示

var arr = ["1", "2"];

var unfilteredBoats = [{
  "boatId": "3",
  "canPoll": true,
}, {
  "boatId": "2",
  "canPoll": true,
}];

var filteredArr = unfilteredBoats.filter(function(e) {
  return arr.indexOf(e.boatId) === -1;
});

console.log(filteredArr);

document.getElementById('result').innerHTML = JSON.stringify(filteredArr, 0, 4);
<pre id="result"></pre>