例如,我要检查给定数组是否包含第二个数组的每个元素
['Laptop', 'PC', 'Ipad', 'Telephone', 'Smart Watch']
['Laptop,' 'PC', 'Smart Watch'] //true
['Laptop', 'Ipad', 'Banana'] //false
我尝试了以下代码:
var arr = [1, 2, 3];
var check = [3, 4, 5];
var found = false;
for (var i = 0; i < check.length; i++) {
if (arr.indexOf(check[i]) > -1) {
found = true;
break;
}
}
alert(found);
它可以工作,但不是我想要的,即使在父数组中仅找到子元素中的一个,它也会发出警告。那我怎么实现我想要的呢?
答案 0 :(得分:1)
您可以拿Set
并用Array#every
进行确认。
const check = (a, b) => b.every(Set.prototype.has, new Set(a));
var array1 = ['Laptop', 'PC', 'Ipad', 'Telephone', 'Smart Watch'],
array2 = ['Laptop', 'PC', 'Smart Watch'],
array3 = ['Laptop', 'Ipad', 'Banana'];
console.log(check(array1, array2)); // true
console.log(check(array1, array3)); // false
ES5(IE安全)
function check(a, b) {
var items = a.reduce(function (o, v) {
o[v] = true;
return o;
}, Object.create(null));
return b.every(function (v) { return items[v]; });
}
var array1 = ['Laptop', 'PC', 'Ipad', 'Telephone', 'Smart Watch'],
array2 = ['Laptop', 'PC', 'Smart Watch'],
array3 = ['Laptop', 'Ipad', 'Banana'];
console.log(check(array1, array2)); // true
console.log(check(array1, array3)); // false
答案 1 :(得分:1)
[0.02, 0.03, 0.05, 0.06, 0.1, 0.15]
答案 2 :(得分:0)
您可以使用Array.every()
来迭代第二个数组,并使用Array.includes()
(对于旧的浏览器,请使用Array.indexOf()
)来检查第一个数组中是否存在该项。如果任何检查包括检查失败,那么every方法将返回false
,如果所有检查都成功,则返回true
。
const contains = (arr1, arr2) =>
arr2.every(v => arr1.includes(v)); // or arr2.every(v => arr1.indexOf(v) !== -1) for IE
console.log(contains(['Laptop', 'PC', 'Ipad', 'Telephone', 'Smart Watch'], ['Laptop', 'PC', 'Smart Watch'])); // true
console.log(contains(['Laptop', 'PC', 'Ipad', 'Telephone', 'Smart Watch'], ['Laptop', 'Ipad', 'Banana'])); // false
console.log(contains([1, 2, 3], [3, 4, 5])); // false