繁体   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