Javascript 如何过滤阵列中的重复对象
我正在为我的代码使用下划线.js插件 我在这里试过了 请帮助我修复此问题,例如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将
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