查找数组中相同的对象,而不是删除它们

时间:2013-04-05 20:32:10

标签: javascript underscore.js

我正在尝试在数组中查找与在UI中标记它们相同的对象。我似乎无法使用不受欢迎的人来做它。

我这样做:

var a = [ {'id': 1, 'name': 'jake' }, {'id':4, 'name': 'jenny'},  {'id': 9, 'name': 'nick'}, {'id': 1, 'name': 'jake' } ];
var eaches = _.each(a, function (obj) {
  _.find(a, function () {
    return _.isEqual(a, obj);
  });
});

提前致谢!

1 个答案:

答案 0 :(得分:1)

似乎你需要这样的东西:

var a = [{
    'id': 1,
    'name': 'jake'
}, {
    'id': 4,
    'name': 'jenny'
}, {
    'id': 9,
    'name': 'nick'
}, {
    'id': 1,
    'name': 'jake'
}];

var eq = [];

_.each(a, function (x, i) {
    var e = _.find(a, function (y, j) {
        return i !== j && _.isEqual(x, y);
    });
    if (e) {
        eq.push(x);
    }
});

console.log(eq);

http://jsfiddle.net/f0t0n/WBbs5/


<强>更新
自定义“_.uniq”基于_.isEqual而不是===严格比较:

var uniqEq = _.reject(eq, function(x, i) {
    return _.find(eq, function(y, j) {
        return i < j && _.isEqual(x, y);
    });
});

http://jsfiddle.net/f0t0n/hzBBA/