如何从 arrayList Jquery/Javascript 中删除重复的对象值
How to remove repeated object values from arrayList Jquery/Javascript
我有一个包含对象的arrayList。如果对象具有相同的值,我只需要显示一个值。
例如:[ {a:0,b:1},{a:1,b:0},{a:0,b:1} ]从上面的例子中,我只需要显示第一个和第二个对象,并跳过第三个对象,因为它与第一个对象相同。
注意:数组中的对象可以是无限的,我无法对索引值进行硬编码。谁能帮我解决通用解决方案。
这是我尝试过的:
points = [];
newarr = [];
locArray = [ {a:0,b:1},{a:1,b:0},{a:0,b:1} ];
if(abc!=null){
removeDuplicateCoordinates();
$.each(newarr,function(key,val){
points.push([val.a,val.b]);
});
}
function removeDuplicateCoordinates(){
var arr = locArray;
$.each(arr, function(index,item){
if(searchForItem(newarr,item)<0){
newarr.push(item);
}
});
}
function searchForItem(array, item){
var i, j, current;
for(i = 0; i < array.length; ++i){
if(item.length === array[i].length){
current = array[i];
for(j = 0; j < item.length && item[j] === current[j]; ++j);
if(j === item.length)
return i;
}
}
return -1;
}
小提琴演示
试试这个
newarr = [];
testarr = [];
locArray = [ {a:0,b:1},{a:1,b:0},{a:0,b:1} ];
for (var i = 0; i<locArray.length;i++)
{
var idx = $.inArray(String(locArray[i].a)+String(locArray[i].b), testarr);
if (idx == -1) {
testarr.push(String(locArray[i].a)+String(locArray[i].b));
newarr.push(locArray[i]);
}
}
console.log(newarr);
我最喜欢的方法之一:
usedArray = {};
locArray = [ {a:0,b:1},{a:1,b:0},{a:0,b:1} ];
for (key in locArray) {
if (usedArray[JSON.stringify(locArray[key])] == undefined) {
console.log(JSON.stringify(locArray[key]));
usedArray[JSON.stringify(locArray[key])] = true;
}
}
不知道它有多快,但它每次都对我有用。工作小提琴。
而不是console.log(JSON.stringify(locArray[key]));
您可以填充新数组:
newarr.push(locArray[key]);
编辑
测试宽度 100000 个小提琴对象~300毫秒我可以忍受。
首先,Array.indexOf() 不会比较对象。
我们知道:
在 JavaScript 中,对象是一种引用类型。两个不同的对象永远不会相等,即使它们具有相同的属性也是如此。只有将同一对象引用与自身进行比较才能生成 true。
因此,恕我直言,最简单,最快的方法是自己比较。这是工作 JSFiddle
var locArray = [{ a: 0, b: 1 }, { a: 1, b: 0 }, { a: 0, b: 1 }];
//We will try to find if point alrady exists in array
Array.prototype.indexOfPoint = function(point) {
for (var i = 0; i < this.length; i++) {
var arrPoint = this[i];
if (arrPoint.a === point.a && arrPoint.b === point.b)
return i;
}
return -1;
};
Array.prototype.uniquePoints = function() {
var a = [];
for (var i = 0; i < this.length; i++) {
var currentPoint = this[i];
if (a.indexOfPoint(currentPoint) < 0) {
a.push(currentPoint);
}
}
return a;
};
var newarr = locArray.uniquePoints();
console.log(newarr);
相关文章:
- 解析JSON并从中删除对象会出错
- 在特定条件下从存储在localStorage中的阵列中删除对象
- Es6:能够在设置/更新/删除对象属性时调用自定义方法
- 正在从列表中删除对象
- 删除对象时终止setInterval
- 在JavaScript中高效地删除对象
- 使用javascript(ajax,jquery?)从表中删除对象(用户等)
- 从范围中删除对象时,它会在 Angularjs 中隐藏其余对象
- 如何正确地从数组中删除对象
- 捕捉.svg — 单击其中一个元素时删除对象
- 如何删除对象数组中的对象:jquery
- 下划线.js,根据键值删除对象数组中的重复项
- 如何在Immutable中从数组中删除对象
- 删除对象属性在执行删除操作之前生效
- 使用indexOf从列表中删除对象
- 从数组中删除对象
- 如何使用.bind(this)删除对象的事件侦听器
- 正在创建事件侦听器以从本地存储中删除对象
- 如何通过引用(javascript)从数组中删除对象
- 如何按条件删除对象中的对象