我有一个有一堆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为空,它根本不应该过滤,那部分相当简单。
答案 0 :(得分:3)
您可以在VanillaJS中使用filter
var filteredArr = originalBoats.filter(function(e) {
return arr.indexOf(e.boatId) === -1;
});
可以完成同样的操作
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>