我想比较一个数组与数组集。 例如,将数组与一个用JavaScript设置的数组进行比较
array 1 = [[1,2,3],[1,4,5]];
array 2 = [1,3,6,5,4];
由于阵列2匹配1,4,5与阵列1的一组它应返回true的元素。
我想比较一个数组与数组集。 例如,将数组与一个用JavaScript设置的数组进行比较
array 1 = [[1,2,3],[1,4,5]];
array 2 = [1,3,6,5,4];
由于阵列2匹配1,4,5与阵列1的一组它应返回true的元素。
您可以通过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)
编辑:我推动的结果返回到一个空阵列...
谢谢。但希望知道如何访问函数外部的“匹配”。 –
我可以在控制台日志中看到“true”,但如何在html中访问它? –
@vaibhavshah iv'e编辑了答案...您可以将数组附加到文档onload ... –
拼合第一个数组(拆开嵌套数组)。然后做一个intersection扁平阵列和第二个阵列。通过第一个阵列进行映射,并对每个阵列对第二个阵列执行intersection。然后过滤掉所有空的数组。如果结果数组包含某些内容,则匹配某些内容。
const hasMatch = Boolean(array1.map(a => intersect(a, array2)).filter(i => i.length).length)
假设我弄平我的数组1, array 1 = 1,2,3,4,5; 而我的数组2 = 1,3,4; 这将返回true。 但这不符合我的任何数组集。 –
我的意思是数组集合是 (1,2,3)和(1,4,5)是2集, 如果我的数组2中的元素匹配任何一个集合,它应该是true。 –
谢谢。我会检查出 –
迭代你的数组,并检查值是否存在于另一个数组中。
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);
应该使用每一个,而不是forEach – epascarello
@epascarello是的,你是对的; “每个人”都是这里的一个好人选。更新,谢谢! – vol7ron
@ vol7ron,所以它返回false和true J? BTW美丽的代码。 –
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){
\t innerMatch = false;
break;
}
}
if (innerMatch) atLeastOneMatch = true;
}
return atLeastOneMatch;
}
console.log(isMatch)
当innerMatch变为false时,停止迭代嵌套数组。它节省了你的时间。 –
谢谢。我会检查出 –
谢谢@KoshVery –
使用循环和循环。获取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.
}
}
谢谢。我会检查一下。 –
你想压扁数组1,并确保它的每个值也在数组2中? – Brad
不,我想确保数组1中至少有一组数组存在于数组2中。 –
so循环和循环 – epascarello