我正在使用underscore.js插件来获取此代码 我在这里试过 jsfiddle
var basket=[{
"basketitems":[{"items":[]}],
"itemdetails":[{
"amountPledged": "100",
"bActivity": "Handloom Work",
"bCity": "Nadia"
},
{
"amountPledged": "100",
"bActivity": "Saree Business",
"bCity": "Nadia"
},
{
"amountPledged": "100",
"bActivity": "Saree Business",
"bCity": "Nadia"
}],
"cartdetails":[],
"paymentdetails":[],
"userdetails":[]
}];
var tempbasket=_.uniq(basket);
document.body.innerHTML = JSON.stringify(tempbasket);
帮我解决这个问题
答案 0 :(得分:3)
例如,
basket[0].itemdetails = _.uniq(basket[0].itemdetails, JSON.stringify)
要按特定字段过滤,请传递一个接受对象并返回该字段的函数:
_.uniq(itemdetails, function(x) { return x.bCity })
文档:uniq
答案 1 :(得分:1)
有两件事:
1。首先,你应该这样做:
basket[0].itemdetails=_.uniq(basket[0].itemdetails);
document.body.innerHTML = JSON.stringify(basket);
不是:
var tempbasket=_.uniq(basket);
document.body.innerHTML = JSON.stringify(tempbasket);
2。第二件事是,因为您的basket[0].itemdetails
是对象数组,所以_.unique
将不会在那里工作。在javascript中,两个不同的对象不能相等。
示例:强>
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);
jsfiddle:http://jsfiddle.net/F4Q4u/3/
享受JScripting !!
答案 2 :(得分:0)
var tempbasket=_.uniq(basket[0].itemdetails.map(function(d){return JSON.stringify(d)}));
答案 3 :(得分:0)
您可以复制现有的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
答案 4 :(得分:-1)
我自己从未使用下划线,但采取(不是那么)疯狂的猜测,它检查第一个indexOf项是否与其实际索引相同。因为JS将逻辑上相同的对象视为不同的对象,所以它也会将它们视为不同的对象。您可能必须编写自己的unique()函数来正确处理对象。