根据另一个数组删除JavaScript数组中的重复项?

时间:2016-02-21 14:39:33

标签: javascript jquery arrays

我有两个数组如下:

var Ids   = ['123',  '456',  '789',   '789'];
var Names = ['jack', 'jack', 'peter', 'peter'];

现在我需要删除Ids数组中的重复值,然后根据删除,删除Names数组中的值。

我可以使用.filter()分别删除每个数组的重复值:

var Unique_Ids   = Ids.filter(function(item, pos) { return Ids.indexOf(item) == pos; });
//=> 123, 456, 789

var Unique_Names = Ids.filter(function(item, pos) { return Names.indexOf(item) == pos; });
//=> jack, peter

但这不是我需要的......根据3中的项目数,我需要两个数组中的项目数相等(在本例中为Unique_Ids

无论如何我需要的是:

var Unique_Ids   = ['123',  '456',  '789'];
var Unique_Names = ['jack', 'jack', 'peter'];

我该怎么做?

注意:我不想要包含此indexOf()方法的解决方案。因为它不适用于IE和旧浏览器。我认为jQuery.inArray()可能是一个不错的选择。

4 个答案:

答案 0 :(得分:1)

不是最优雅的解决方案,但这符合您的需求:

var Ids   = ['123',  '456',  '789',   '789'];
var Names = ['jack', 'jack', 'peter', 'peter'];
var Unique_Ids = [];
var Unique_Names = [];
for(i=0; i<Ids.length; i++) { Unique_Names.push(Names[i]); Unique_Ids.push(Ids[i]); } //Create 2 new arrays without polluting the old ones
var idToCompare;
for(id=0; id<Unique_Ids.length; id++) {
    idToCompare = Unique_Ids[id];
    for(id2=id+1; id2<Unique_Ids.length; id2++) {
        if(Unique_Ids[id] == Unique_Ids[id2]) {
            Unique_Ids.splice(id2, 1);
            Unique_Names.splice(id2, 1);
            id2--;
        }
    }
}

首先,它会创建每个数组的副本。这将遍历数组Unique_Ids的每个元素,检查是否重复,然后如果是,则从Unique_IdsUnique_Names中删除它。如果在非常大的数组上完成,这可能会非常慢。

正如评论中所要求的,这是一个可以改变原始数组的解决方案:

var Ids   = ['123',  '456',  '789',   '789'];
var Names = ['jack', 'jack', 'peter', 'peter'];
var idToCompare;
for(id=0; id<Ids.length; id++) {
    idToCompare = Ids[id];
    for(id2=id+1; id2<Ids.length; id2++) {
        if(Ids[id] == Ids[id2]) {
            Ids.splice(id2, 1);
            Names.splice(id2, 1);
            id2--;
        }
    }
}  

答案 1 :(得分:1)

这是一种单调乏味的方式

var Ids   = ['123',  '456',  '789',   '789'];
var Names = ['jack', 'jack', 'peter', 'peter'];

var i;
var t = {};
var unique_ids = [];
var unique_names = [];

for(i = 0; i < Ids.length; i += 1) {
    var id = Ids[i];
    var name = Names[i];
    t[id] = t[id] || name;
}
for (i in t) {
    if (t.hasOwnProperty(i)) {
        unique_ids.push(i);
        unique_names.push(t[i]);
    }
}

答案 2 :(得分:1)

使用这个小代码:

 var Ids   = ['123',  '456',  '789',   '789'];
var Names = ['jack', 'jack', 'peter', 'peter'];
var uniqueIds = [];
var uniqueNames = [];
var i=0;
$.each(Ids, function(i, el){
    if($.inArray(el, uniqueIds) === -1) {
        uniqueIds.push(el);
        uniqueNames.push(Names[i]);
        console.log(Names[i]);
        i++;

        }
});

答案 3 :(得分:0)

每次找到新项目时,您都可以遍历第一个数组并填充新数组:

var Ids   = ['123',  '456',  '789',   '789'];
var Names = ['jack', 'jack', 'peter', 'peter'];
var Unique_Ids = [];
var Unique_Names = [];
var IndexString='';
for(var i=0;i<Ids.length;i++){
    if(IndexString.indexOf('|'+Ids[i]+'|')==-1){
        Unique_Ids.push(Ids[i]);
        Unique_Names.push(Names[i]);
        IndexString+='|'+Ids[i]+'|'
    }
}