2014-03-24 153 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(); 

     } 
    }