2014-01-13 48 views
-1

裏面我使用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

有沒有辦法通過itemdetails對象內的關鍵[CityName]過濾? –

回答

3

例如,

basket[0].itemdetails = _.uniq(basket[0].itemdetails, JSON.stringify) 

http://jsfiddle.net/g5TD9/3/

要由特定的字段進行篩選,通過一個函數,一個對象,並返回現場:

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

文檔:uniq

+0

有沒有辦法通過itemdetails對象內的關鍵[bCity]過濾? –

+0

@SureshPattu:當然,只是傳遞一個函數,它返回它作爲第二個參數:'_.uniq(list,function(item){return item.whatYouWant})' – georg

+0

+1爲_.uniq() –

-1

我從來沒有使用下劃線自己,但採取了(沒有那麼)瘋狂猜測,它檢查第一個indexOf是否與它的實際索引相同。因爲JS將邏輯上相同的對象視爲不同的對象,所以它也將它們視爲不同的對象。您可能必須編寫自己的unique()函數才能正確處理對象。

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!

+0

有沒有辦法通過itemdetails對象內的關鍵[bCity]進行過濾? –

+0

是的,當然有辦法。試試這個:http://jsfiddle.net/ny4dH/ –

+0

在這裏添加了一個工作解決方案... –

0
var tempbasket=_.uniq(basket[0].itemdetails.map(function(d){return JSON.stringify(d)})); 
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