2014-03-24 152 views
0

我有以下比較陣列JS

var a = [4,6,12]; 
var b = [4,6]; 

for (var i = 0; i < a.length; i++) { 
    for (var j = 0; j < b.length; j++) { 
     if (a[i] !== b[j]) { 
     a.pop(); 
     } 
    } 
} 

我想比較這兩個,並刪除從12如果沒有b中找到。我不想創建一個新的數組,結果只是從一個。

但是,如果我控制檯登錄,我得到一個空的。

+1

究竟是你想做些什麼?只保留兩個數組中的元素? –

回答

0
var a = [4,6,12]; 
var b = [4,6]; 

for (var i = 0; i < a.length; i++) { 
     if (!b.indexOf(a[i])) { 
     a.pop(); 
     } 
} 
0
var a = [4,6,12]; 
var b = [4,6]; 

var common = $.grep(a, function(element) { 
    return $.inArray(element, b) !== -1; 
}); 

console.log(common); // returns [4,6]; 
1

爲什麼a是出來爲空的原因是因爲你的雙循環。您將a的每個元素與b的每個其他元素進行比較。當你擊中[0] == b [1]時,很顯然,4!= 6讓你彈出它。

1

嘗試:

var a = [4,6,12]; 
var b = [4,6]; 

a.forEach(function(v,i){ 
    if (b.indexOf(v) === -1) { 
     a.splice(i,v); 
    } 
}); 

console.log(a); // result [4,6] 

JSFiddle

迭代檢查a數組的每個元素和比較b元件,如果某些元件沒有在b則該元件從a陣列中移除存在

0

試試這個:

var a = [4,6,12]; 
var b = [4,6]; 
var i = 0; 
for (; i < a.length && i < b.length; i++) 
    if (a[i] !== b[i]) { 
     a.pop(); 
     break; 
    } 
while(i < a.length) 
    a.pop(); 
0

您的循環第二導致此腳本從去除一切:

1. i = 0, j = 0 => a[0] = 4, b[0] = 4. (4 !== 4) => false, 
2. i = 0, j = 1 => a[0] = 4, b[1] = 6. (4 !== 6) => true, pop first element from a 
3. i = 1, j = 0 => a[1] = 6, b[0] = 4. (6 !== 4) => true, pop second elmement from a 

所以你陸續從彈出一個元素,直到一個是空的。

嘗試,而不是:

var a = [4,6,12]; 
var b = [4,6]; 

    for (var i = 0; i < a.length; i++) { 
      if (b.indexOf(a[i]) == -1) { 
      a.pop(); 

     } 
    }