2017-06-13 170 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

謝謝。我會檢查一下。 –

相關問題