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