2017-06-13 42 views
0

我想比较一个数组与数组集。 例如,将数组与一个用JavaScript设置的数组进行比较

array 1 = [[1,2,3],[1,4,5]]; 
array 2 = [1,3,6,5,4]; 

由于阵列2匹配1,4,5与阵列1的一组它应返回true的元素。

+0

你想压扁数组1,并确保它的每个值也在数组2中? – Brad

+0

不,我想确保数组1中至少有一组数组存在于数组2中。 –

+0

so循环和循环 – epascarello

回答

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)

编辑:我推动的结果返回到一个空阵列...

+0

谢谢。但希望知道如何访问函数外部的“匹配”。 –

+0

我可以在控制台日志中看到“true”,但如何在html中访问它? –

+0

@vaibhavshah iv'e编辑了答案...您可以将数组附加到文档onload ... –

0

拼合第一个数组(拆开嵌套数组)。然后做一个intersection扁平阵列和第二个阵列。通过第一个阵列进行映射,并对每个阵列对第二个阵列执行intersection。然后过滤掉所有空的数组。如果结果数组包含某些内容,则匹配某些内容。

const hasMatch = Boolean(array1.map(a => intersect(a, array2)).filter(i => i.length).length) 
+0

假设我弄平我的数组1, array 1 = 1,2,3,4,5; 而我的数组2 = 1,3,4; 这将返回true。 但这不符合我的任何数组集。 –

+0

我的意思是数组集合是 (1,2,3)和(1,4,5)是2集, 如果我的数组2中的元素匹配任何一个集合,它应该是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); 
+0

应该使用每一个,而不是forEach – epascarello

+0

@epascarello是的,你是对的; “每个人”都是这里的一个好人选。更新,谢谢! – vol7ron

+0

@ vol7ron,所以它返回false和true J​​? BTW美丽的代码。 –

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){ 
 
     \t innerMatch = false; 
 
      break; 
 
     } 
 
    } 
 

 
    if (innerMatch) atLeastOneMatch = true; 
 
    } 
 

 
    return atLeastOneMatch; 
 
} 
 

 
console.log(isMatch)

+0

当innerMatch变为false时,停止迭代嵌套数组。它节省了你的时间。 –

+0

谢谢。我会检查出 –

+0

谢谢@KoshVery –

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. 
    } 
} 
+0

谢谢。我会检查一下。 –

相关问题