Javascript 如何过滤阵列中的重复对象

Javascript 如何过滤阵列中的重复对象,javascript,jquery,underscore.js,Javascript,Jquery,Underscore.js,我正在为我的代码使用下划线.js插件 我在这里试过了 请帮助我修复此问题,例如 basket[0].itemdetails = _.uniq(basket[0].itemdetails, JSON.stringify) 要按特定字段进行筛选,请传递一个函数,该函数接受对象并返回该字段: _.uniq(itemdetails, function(x) { return x.bCity }) 文档:我自己从来没有使用下划线,但我猜得不太准,它会检查项目的第一个索引是否与其实际索引相同。因为JS将

我正在为我的代码使用下划线.js插件 我在这里试过了

请帮助我修复此问题,例如

basket[0].itemdetails = _.uniq(basket[0].itemdetails, JSON.stringify)
要按特定字段进行筛选,请传递一个函数,该函数接受对象并返回该字段:

_.uniq(itemdetails, function(x) { return x.bCity })

文档:

我自己从来没有使用下划线,但我猜得不太准,它会检查项目的第一个索引是否与其实际索引相同。因为JS将逻辑上相同的对象视为不同的对象,所以它也将它们视为不同的对象。您可能需要编写自己独特的函数来正确处理对象

有两件事:

一,。首先,你应该做:

basket[0].itemdetails=_.uniq(basket[0].itemdetails);
document.body.innerHTML = JSON.stringify(basket);
不是:

二,。第二件事是,由于您的篮子[0]。itemdetails是对象数组,因此U8;.unique在那里不起作用。因为javascript中的两个不同对象不能相等

例如:

所以,这个技巧在这里不起作用。您必须手动执行此操作。祝你好运

======编辑=====

以下是工作解决方案:

basket[0].itemdetails = _.unique(basket[0].itemdetails, function(item,key,a){
    return item.bActivity;
});

console.log(basket[0].itemdetails);
jsfiddle:


享受JScript

您可以复制现有的JSON并对其进行迭代以检查重复项

var basketCopy = JSON.parse( JSON.stringify( basket ) );
basketCopy[0].itemdetails = [];
_.each(basket[0].itemdetails, function(item) {
    if(!_.findWhere(basketCopy[0].itemdetails, item)) {
        basketCopy[0].itemdetails.push(item);
    }
});
console.log(basketCopy); // Your unique itemdetails list

是否有方法在itemdetails对象内按键[bCity]进行筛选?@SureshPattu:当然,只需传递一个函数作为第二个参数返回即可:u.uniqlist,functionitem{return item.whatYouWant}在itemdetails对象内有方法按键[bCity]进行筛选吗?在itemdetails对象内有方法按键[CityName]进行筛选吗?
var x = {a:5};
var y = {a:5};

console.log(x == y); // false;
basket[0].itemdetails = _.unique(basket[0].itemdetails, function(item,key,a){
    return item.bActivity;
});

console.log(basket[0].itemdetails);
var tempbasket=_.uniq(basket[0].itemdetails.map(function(d){return JSON.stringify(d)}));
var basketCopy = JSON.parse( JSON.stringify( basket ) );
basketCopy[0].itemdetails = [];
_.each(basket[0].itemdetails, function(item) {
    if(!_.findWhere(basketCopy[0].itemdetails, item)) {
        basketCopy[0].itemdetails.push(item);
    }
});
console.log(basketCopy); // Your unique itemdetails list