我想将数组与数组进行比较。 例如,
array 1 = [[1,2,3],[1,4,5]];
array 2 = [1,3,6,5,4];
由于数组2中的元素1,4,5与数组1中的集匹配,因此它应返回true。
答案 0 :(得分:1)
迭代你的数组并检查另一个数组中是否存在该值。
var sets = [
[1, 2, 3],
[1, 4, 5]
],
valid = [1, 3, 6, 5, 4];
var processed = sets.map(set => set.every(val => valid.includes(val)));
console.log( processed);
有一些方法可以提高效率,但请先尝试一下。
以下是一个如何检查是否为真的示例:
// Check if any are true
var any = processed.some(v=>v);
console.log( any );
答案 1 :(得分:1)
使用循环和循环。获取array1中的所有子数组,并检查每个子数组包含在array2中。
function check(){
var array1 = [[1,2,3],[1,4,5]];
var array2 = [1,3,6,5,4];
for(let arr of array1){
let flag=true;
for(let child of arr){
if(array2.indexOf(child) < 0){
flag = false;
break; // if one element not in array2, enter next loop.
}
}
if(flag) return flag; // if got one child array elements all in array2, stop loop.
}
}
答案 2 :(得分:0)
展平第一个数组(解压缩嵌套数组)。然后执行展平数组intersection和第二个数组。映射第一个数组,并为每个数组对第二个数组执行intersection。然后过滤掉所有空的数组。如果结果数组包含某些内容,那么匹配的东西。
const hasMatch = Boolean(array1.map(a => intersect(a, array2)).filter(i => i.length).length)
答案 3 :(得分:0)
var array1 = [
[1, 2, 3],
[1, 4, 5]
];
var array2 = [1, 3, 6, 5, 4];
var isMatch = doesNestedArrayMatchArray(array1, array2);
function doesNestedArrayMatchArray(nestedArray, bigArray) {
var atLeastOneMatch = false;
for (var i = 0; i < nestedArray.length; i++) {
var innerMatch = true;
//go through each array of array1
for (var j = 0; j < nestedArray[i].length; j++) {
if (bigArray.indexOf(nestedArray[i][j]) == -1){
innerMatch = false;
break;
}
}
if (innerMatch) atLeastOneMatch = true;
}
return atLeastOneMatch;
}
console.log(isMatch)
&#13;
答案 4 :(得分:0)
您可以迭代array1
并在每个数字组上使用every()
作为条件,使用includes()
和第二个数组,语法相对较短:
var array1 = [
[1, 2, 3],
[1, 4, 5]
];
var array2 = [1, 3, 6, 5, 4];
var results = [];
array1.forEach(function(item, index, array) {
if (item.every(x => array2.includes(x))) {
results.push(item)
}
});
console.log(results)
&#13;
已编辑:我推送返回true的结果为空数组...