如何使用下划线基于ids来捕获对象

时间:2015-10-28 09:06:54

标签: javascript arrays underscore.js

我有一个有一堆id的数组

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

我有一个看起来有点像

的对象数组
[{
    "boatId": "562f464a9cdf7e6e33aa2514",
        "canPoll": true,
}, {
    "boatId": "562f4647e6e33aa2514",
        "canPoll": true,
}]

我想从第二个列表中剔除其ID不在数组 arr

中的对象

我提出了以下行,但它返回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为空,它根本不应该过滤,那部分相当简单。

1 个答案:

答案 0 :(得分:3)

您可以在VanillaJS中使用filter

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

使用下划线的filtercontains

可以完成同样的操作
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>