1

我有一个对象数组,一个对象看起来像这样:

{name: "object1", type: "event", props: {internalid: 1}}
{name: "object2", type: "event", props: {internalid: 1}}

我想遍历这些对象的数组,并且我想创建一个没有重复的对象的新数组(对我来说,如果两个项目在属性中具有相同internalIdprops属性,则它们是重复的)

我想知道从原始数组中获取“唯一”对象并根据internalId属性进入新数组的最佳和最有效的方法是什么?

谢谢

4

3 回答 3

0

您可以使用 Underscore 或 Lo-Dash 中的uniq方法轻松实现这一点。如果您的数组已经排序,他们会稍微优化一下。这两个库都有详细记录的代码,因此您可以随时查看他们解决问题的方法。

这是一个例子:

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;
});
于 2013-02-06T17:24:54.003 回答
0

这是一种使用 Dojoarray功能的方法。过滤器使用一个临时对象,其中包含您已经遇到的 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
});
于 2013-02-06T18:55:34.403 回答
0

您最好的方法可能是创建一个新的空数组并简单地遍历原始数组,如果新数组中尚不存在元素(基于您的唯一定义),则将它们添加到新数组中。我没有看到您的解决方案比这更简单。

于 2013-02-06T17:12:12.623 回答