簡體   English   中英

將數組與對象數組進行比較

[英]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.

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