我想比較一個數組與數組集。 例如,將數組與一個用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