在jquery代码中从数组中移除重复对象不工作
Removing Duplicate object from array in jquery code not working
这是我的jquery数组,它包含重复的对象/元素:
[{
"name": "hello",
"label": "world"
}, {
"name": "abc",
"label": "xyz"
}, {
"name": "hello",
"label": "world"
}]
我使用下面的一段代码来删除重复的元素,但它不工作,重复的元素不被删除。
var result = [];
$.each(subservices, function (i, e) {
if ($.inArray(e, result) == -1)
result.push(e);
});
alert(JSON.stringify(result));
函数$.inArray
对于简单类型(例如数字或字符串)工作良好,但对于复杂类型它不会产生正确的结果,因为它试图通过引用进行匹配。代替在循环中使用inArray
,您可以使用函数grep
:
var subservices = [{
"name": "hello",
"label": "world"
}, {
"name": "abc",
"label": "xyz"
}, {
"name": "hello",
"label": "world"
}
];
var result = [];
$.each(subservices, function (i, e) {
var matchingItems = $.grep(result, function (item) {
return item.name === e.name && item.label === e.label;
});
if (matchingItems.length === 0){
result.push(e);
}
});
//displays result [{"name":"hello","label":"world"},{"name":"abc","label":"xyz"}]
alert(JSON.stringify(result));
这是一个工作的jsFiddle
您需要根据唯一的名称/值筛选数组。下面是一些纯JS的解决方案:
var data = [{
"name": "hello",
"label": "world"
}, {
"name": "abc",
"label": "xyz"
}, {
"name": "hello",
"label": "world"
}];
var result = data.filter(function(el, i, x) {
return x.some(function(obj, j) {
return obj.name === el.name && (x = j);
}) && i == x;
});
alert(JSON.stringify(result, null, 4));
这是因为这两个对象是不同的,尽管其中的所有属性都是相同的。从
可以看到console.log(result[0] === result[2]);
结果为false。
相反,您需要基于唯一标识符(例如name &标签如下:
for(var i = 0, i < results.length; i++) {
if (result[i].name === ... && result[i].label === ...) {
index = i;
break;
}
}
相关文章:
- 读取在具有IE的工作程序中生成的对象URL
- 我怎样才能让jQuery即使在尚未创建的对象上也能工作
- JSON.stringify没有'在更改的对象上无法按预期工作.如何处理
- 如何让我的正则表达式代码在我的dojo cellWidget对象上工作
- dropable的Over事件是't工作正常,在可拖动对象被拖放到贪婪的可拖动对象上并再次拖动后
- 地图如何在 Ecmascript 6 中使用对象键工作
- 了解 JavaScript 对象实例或工作流
- JavaScript 返回对象未按预期工作
- 如何让、要求和原型协同工作以在 javascript 中制作对象
- 谷歌应用程序脚本-正在尝试使用getUrl.TypeError:在对象工作表中找不到函数getUrl
- 一个对象怎么能像返回自身和另一个对象一样工作
- "键“;jQuery中的对象无法正常工作
- 对象引用的隐式传递是如何工作的
- dojo类对象的工作原理
- app.use(restify.bodyParser())无法工作,因为req对象为空
- 难以理解JavaScript中的基本对象工作
- jquery .after 不对非追加对象工作
- Couchdb _design/doc/_update/push未作为对象工作
- 如何使此CoffeeScript对象工作
- 事件链是如何为多个对象工作的