我有一个对象数组,对象看起来像这样:
{name: "object1", type: "event", props: {internalid: 1}}
{name: "object2", type: "event", props: {internalid: 1}}
我想循环遍历这些对象的数组,我想创建一个没有重复的对象的新数组(对于我来说,如果internalId
中的props
具有相同的internalId
,则两个项目是重复的} property)
我想知道什么是最好和最有效的方法来获得"独特"原始数组中的对象以及基于{{1}}属性的新对象?
谢谢
答案 0 :(得分:0)
你最好的方法可能是创建一个新的空数组并简单地遍历原始数组,如果它们尚不存在,则将元素添加到新数组中(基于您的唯一定义)。我不认为你的解决方案比这简单得多。
答案 1 :(得分:0)
您可以使用uniq或Underscore中的Lo-Dash方法轻松实现此目的。如果你的数组已经排序,他们会优化一些东西。这两个库都有很好的文档代码,因此您可以随时查看他们解决问题的方法。
以下是一个例子:
var objs = [{
name: "object1",
type: "event",
props: {
internalid: 1
}
}, {
name: "object2",
type: "event",
props: {
internalid: 1
}
}, {
name: "object3",
type: "event",
props: {
internalid: 2
}
}];
var result = _.uniq(objs, false, function (item) {
return item.props.internalid;
});
答案 2 :(得分:0)
这是使用Dojo array
功能执行此操作的方法。过滤器使用包含您已经遇到的ID的临时对象。
require(["dojo/_base/array"], function(array){
var data = []; // load the data
var _lookup = {};
var uniqueArray = array.filter(data, function(item) {
var key = item.props.internalid;
if(_lookup[key] !== true) {
_lookup[key] = true;
return true;
}
return false;
});
delete _lookup;
//use uniqueArray
});