我有两个数组如下:
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()
可能是一个不错的选择。
答案 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_Ids
和Unique_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]+'|'
}
}