gpt4 book ai didi

javascript - 您可以在 Javascript 的数组中一次搜索 2 个值吗

转载 作者:行者123 更新时间:2023-11-30 14:44:44 25 4
gpt4 key购买 nike

我知道我可以通过几种不同的方式搜索(数组中的单个项目)。使用 for 循环、foreach、递归结构等进行迭代,但我并没有尝试这样做,因为我一次要搜索多个项目。

例如,我可能有一个具有此模型的对象数组:

人:[{name: "howdy", date: 2/2, sex: male}, {name: "jack", date: 3/3, sex: male}]

我想知道 howdy 和 jack 是否同时在场。或者我想知道 howdy 和 jack 是否都在人群中。或者,也许我想通过在人员数组中搜索基于生日和性别的匹配项来了解 howdy 和 Jack 是否都在那里。

我知道如何一次做一个,但不知道如何通过多个值进行搜索。我在 stackover flow 上发现了这个,但我不明白。有没有更简单的方法来搜索数组以根据多个键在数组中找到匹配项?

这没有用:

function containsAll(needles, haystack){

for(var i = 0, len = needles.length; i <len; i++){
if($.inArray(needles[i], haystack) == -1_ return false
}
return true;

}


containsAll([34, 78, 89], [78, 67, 34, 99, 56, 89]); // true

containsAll([34, 78, 89], [78, 67, 99, 56, 89]); // false

containsAll([34, 78, 89], [78, 89]); // false

最佳答案

您的方法:

for-loop 中移出 return true

function containsAll(needles, haystack) {

for (var i = 0, len = needles.length; i < len; i++) {
if ($.inArray(needles[i], haystack) === -1) {
return false
}
}

return true;
}


console.log(containsAll([34, 78, 89], [78, 67, 34, 99, 56, 89])); // true
console.log(containsAll([34, 78, 89], [78, 67, 99, 56, 89])); // false
console.log(containsAll([34, 78, 89], [78, 89])); // false
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

您可以使用函数everyincludes:

function containsAll(needles, haystack) {
return needles.every(function(p) {
return haystack.includes(p);
});
}

console.log(containsAll([34, 78, 89], [78, 67, 34, 99, 56, 89])); // true
console.log(containsAll([34, 78, 89], [78, 67, 99, 56, 89])); // false
console.log(containsAll([34, 78, 89], [78, 89]));

完整的 ES6:

var containsAll = (needles, haystack) => needles.every(p => haystack.includes(p));

console.log(containsAll([34, 78, 89], [78, 67, 34, 99, 56, 89])); // true
console.log(containsAll([34, 78, 89], [78, 67, 99, 56, 89])); // false
console.log(containsAll([34, 78, 89], [78, 89]));

检查两个名称是否在这样的数组中:

[{name: "howdy", date: 2/2, sex: male}, {name: "jack", date: 3/3, sex: male}]

遵循这种方法:

var containsAll = (needles, haystack) => needles.every(p => haystack.findIndex(h => h.name === p) > -1);

console.log(containsAll(['howdy', 'jack'], [{name: "howdy", date: '2/2', g: 'm'}, {name: "jack", date: '3/3', g: 'm'}]));
console.log(containsAll(['howdy', 'ele'], [{name: "howdy", date: '2/2', g: 'm'}, {name: "jack", date: '3/3', g: 'm'}]));

按照您的真实场景:

条件将是 h.animal === p.animal

var containsAll = (needles, haystack) => needles.every(p => haystack.findIndex(h => h.animal === p.animal) > -1);

console.log(containsAll([{
num: 34,
animal: "chicken",
city: "chicago"
}], [{
number: 78,
name: "chicken",
num: 34
}, 99, 56, "hello", {
num: 34,
animal: "chicken",
city: "chicago"
}]));

关于javascript - 您可以在 Javascript 的数组中一次搜索 2 个值吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49135494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com