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

Javascript 在数组中查找相同的对象,而不是删除它们,javascript,underscore.js,Javascript,Underscore.js,我试图在数组中找到与在UI中标记它们相同的对象。我似乎不能用undescore来做这件事 我是这样做的: 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 () { retu

我试图在数组中找到与在UI中标记它们相同的对象。我似乎不能用undescore来做这件事

我是这样做的:

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);
  });
});

提前谢谢

看来你需要这样的东西:

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);


更新:
基于
.isEqual
而非
=
严格比较的自定义“
.uniq
”:

var uniqEq = _.reject(eq, function(x, i) {
    return _.find(eq, function(y, j) {
        return i < j && _.isEqual(x, y);
    });
});
var uniqEq=\拒绝(等式,函数(x,i){
返回查找(等式,函数(y,j){
返回i

看来您需要这样的东西:

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);


更新:
基于
.isEqual
而非
=
严格比较的自定义“
.uniq
”:

var uniqEq = _.reject(eq, function(x, i) {
    return _.find(eq, function(y, j) {
        return i < j && _.isEqual(x, y);
    });
});
var uniqEq=\拒绝(等式,函数(x,i){
返回查找(等式,函数(y,j){
返回i

你想做什么?在
a
中查找重复项,这样您就可以找到
{'id':1,'name':'jake'}
?@muistooshort是的,我正在尝试查找所有重复项,就像如果有其他jenny对象,它也会找到该对象一样。您想做什么?在
a
中查找重复项,这样您就可以找到
{'id':1,'name':'jake'}
?@muistooshort是的,我正在尝试查找所有重复项,就像如果有一个额外的jenny对象,它也会找到该对象。如果我这样做,有什么原因导致这个输出上出现q.uniq(eq),它不会删除多个jake对象?因为uniq使用严格的比较,所以如果两个对象相等,它们虽然是不同的引用。您还可以解释返回语句吗。我不明白我为什么这么做==j在那里。谢谢因为当您使用
.find
进行搜索时,您需要确保找到的元素不相同(
x
),并且该元素位于不同的索引处,但与当前索引相同。因此,条件是在不同的“单元”中有
x
y
。是否有原因在这个输出上,如果我这样做uq.uniq(eq),它不会删除多个jake对象?因为
.uniq
使用严格的
=
比较,所以如果两个对象相等,不过它们是不同的引用。你能解释一下返回语句吗。我不明白我为什么这么做==j在那里。谢谢因为当您使用
.find
进行搜索时,您需要确保找到的元素不相同(
x
),并且该元素位于不同的索引处,但与当前索引相同。因此,条件是在不同的“单元”中有
x
y