[英]Compare an array with an array of objects
我有一個包含所有 ID 的數組和一個包含所有有效 ID 的數組。
我只想檢索無效的 ID。
顯然可以通過 for 循環來完成,但如果可能的話,我想使用 .filter() 方法來做到這一點,以使其簡短且可能更透明。
問題是包含有效 id 的數組與包含所有 id 的數組看起來有很大不同。 讓我演示給你看:
var allIds = ["1673","2456","8977","5467"]; var validIds = [ {_id: "2456"}, {_id: "5467"} ]; var invalidIds = []; //as non-associative array invalidIds = allIds.filter(function(x) { return validIds[x]["_id"].indexOf(x) < 0 }); console.log(invalidIds); //Uncaught TypeError: Cannot read property '_id' of undefined
有沒有辦法解決這個問題?
如果您真的堅持不使用 for 循環,則可以,但最好這樣做,因為一旦找到匹配項,它就可以讓您短路檢查。
var allIds = ["1673","2456","8977","5467"];
var validIds = [ {_id: "2456"}, {_id: "5467"} ];
var invalidIds = allIds.filter(function (id) {
return !validIds.reduce(function (contains, item) {
return contains || (item._id === id);
}, false);
}); //["1673", "8977"]
Array.prototype.filter
+ Array.prototype.some
var allIds = ["1673", "2456", "8977", "5467"];
var validIds = [{_id: "2456"}, {_id: "5467"}];
var invalidIds = allIds.filter(function (id) {
return !validIds.some(function (validId) {
return validId._id === id;
});
});
console.log(invalidIds); // ["1673", "8977"])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.