2014-01-05 46 views
3

我有一些數據,我想遍歷並拒絕那些與disabled: true屬性。我的對象變成一個數組。使用_.reject將我的對象變成一個數組

var data = { 
    stuff: { 
    item1: { 
     name: "one", 
     disabled: true 
    }, 
    item2: { 
     name: "two" 
    } 

    } 
}; 


data.stuff = _.reject(data.stuff, function(val){ 
    return val.disabled; 
}); 

data.stuff現在是一個數組,而不是一個Object。我失去了我所有的鑰匙。

+1

'_.reject'只能返回數組。 – meagar

+1

從語義上講,你的'stuff'實際上甚至*應該是一個數組。真。 'item1','item2'或者是有用的數據(然後分別將它變成一個'id'屬性),或者它不是(然後丟棄它)。 – Tomalak

回答

1

最後我只使用原生的JavaScript,而不是下劃線:

//remove disabled items 
for (var item in data.stuff) { 
    if (data.stuff[item].disabled) { 
     delete data.stuff[item]; 
    } 
} 
+0

我喜歡這個Vanilla JS解決方案,但是如果它像你最初嘗試的那樣內聯工作,它會是最好的。對於這裏唯一的解決方案的工作,嘗試@格魯夫兔子的回答+1 – gdibble

0

你有沒有看過用_reduce做這個,備忘錄是一個新的散列,在這裏你合併了你需要的項目(鍵值對)。

3

當您通過data.stuff(它是一個對象)到_.reject時,它只會選取對象的值並將其傳遞給_.reject。所以,key信息丟失,重建對象是不可能的。

相反,你可以像下面這樣做

data.stuff = _.object(_.filter(_.pairs(data.stuff), function(list) { 
    return list[1].disabled; 
})); 

console.log(data); 

輸出

{ stuff: { item1: { name: 'one', disabled: true } } } 

它是如何工作

  1. _.pairs轉換{key:value}對成[key, value]陣列。

  2. _.filter過濾disabled是虛假價值的商品。

  3. _.object將已過濾的[key, value]數組轉換爲{key:value}對。

+1

雖然這可行,但使用'omit()'有一個更簡單的解決方案。見下文。 – tybro0103

+0

這個解決方案是專爲突出,但'_.pairs'不lodash – gdibble

-1

當您使用reject時原始data.stuff未更改。但是,由於您正在分配stuff密鑰,原始數據將丟失。

_.reject應該工作並返回數組。你可以爲了試試這個來完成你想要的東西:

_.each(Object.keys(data.stuff), function(val) { 
    if (data.stuff[val].disabled) 
     delete data.stuff[val]; 
}); 
+0

)一個FN:返回'[「物品1」,「ITEM2」]' – gdibble

+0

下面是它的一個小提琴:https://jsfiddle.net/uqca7r5b/ – sergelerator

4

說,但什麼@archie代碼:

data.stuff = _.reduce(data.stuff, function(memo, value, key){ 
    if(!value.disabled) memo[key] = value; 
    return memo; 
}, {}); 
+0

這是這個問題的唯一解決方案,它將工作內聯(返回數據)並實際返回正確的答案:::'{item2:{name:「two」}}' – gdibble

+0

+它同時適用於lodash &&下劃線 – gdibble

+0

@gdibble不正確。證明:https://jsfiddle.net/ehbmsb5k/ – tybro0103

5

您可以改用​​。

+0

不起作用 - 省略返回相同的數據,即使當發送'data.stuff' – gdibble

+0

這應該是正確的答案 – abhillman

相關問題