比较数组js

时间:2014-03-24 11:46:03

标签: javascript jquery

我有以下

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();
       }
    }
}

我想比较两者,如果在b中找不到,则删除12。我不想创建一个新数组,结果只是从。

中删除

但是,如果我控制日志,我会得到一个空的。

7 个答案:

答案 0 :(得分:1)

a出现空的原因是因为你的双循环。您正在将a的每个元素与b的每个其他元素进行比较。当你点击[0] == b [1]时,很明显,4!= 6所以你弹出它。

答案 1 :(得分: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中删除阵列

答案 2 :(得分: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();
       }
}

答案 3 :(得分: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];

答案 4 :(得分: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();

答案 5 :(得分:0)

a = a.filter(function(item){ return b.contains(item); });

More on .filter()

答案 6 :(得分:0)

您的第二个for循环导致此脚本从以下内容中删除所有内容:

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

所以你从一个接一个地弹出一个元素,直到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();

        }
    }