可以說我有將所有對象鍵爲false
filter: {
"ID": false,
"Name": true,
"Role": false,
"Sector": true,
"Code": false
}
我想所有鍵設置爲false(重置它們)的對象。最好的辦法是什麼,我想避免與foreach
和東西循環。任何整齊的一班?
可以說我有將所有對象鍵爲false
filter: {
"ID": false,
"Name": true,
"Role": false,
"Sector": true,
"Code": false
}
我想所有鍵設置爲false(重置它們)的對象。最好的辦法是什麼,我想避免與foreach
和東西循環。任何整齊的一班?
使用lodash,mapValues
是一個優美,無環路的方式:
filter = {
"ID": false,
"Name": true,
"Role": false,
"Sector": true,
"Code": false
};
filter = _.mapValues(filter,() => false);
如果你想用Underscore.js做這件事,有一個等價的,但名稱略有不同:
filter = _.mapObject(filter,() => false);
在任一情況下,filter
值將被設置爲:
{ ID: false,
Name: false,
Role: false,
Sector: false,
Code: false }
謝謝你。一個問題,如果我想獲得具有「真實」價值的財產(任何時候只有一個),那麼最好如何做到這一點? – chefcurry7
示例數據表明斷言一次只有一個屬性爲「真」。但不管多少,'_.keys(filter).filter(k => filter [k])'會給你一個快捷的數組,給所有真值的鍵。如果你想要嚴格的布爾值,你可以使用「true」的確切等價。你總是可以索引結果數組來得到第一個數組:'_.keys(filter).filter(k => filter [k])[0]'。如果沒有,則返回'undefined'。對不起,該表達式中有三個「過濾器」實例,但您的變量名稱會重載函數名稱。 –
@ chefcurry7您可能還喜歡'_.find(_。keys(filter),k => filter [k])'。它的工作原理類似,但略短。 –
那麼這裏是一個一行香草JS:
Object.keys(filter).forEach(v => filter[v] = false)
它確實使用與.forEach()
方法的隱含的循環,但你必須循環這樣或那樣的(除非你通過更換復位整個對象與硬編碼的默認對象文字)。
糾正我,如果我錯了,但不能這樣做**沒有**循環。不確定OP是否理解這一點。 –
@CarlEdwards,這是很好的卡爾。我沒有意識到箭頭函數是有用的。 – chefcurry7
即使沒有箭頭功能,它仍然非常短,如在其他答案。 – nnnnnn
如果你不使用ES6,這裏是ES5的對應部分。
Object.keys(filter).forEach(function(key, value) {
return filter[key] = false;
})
一小行代碼兼容所有瀏覽器:
for(var i in your_object) your_object[i] = false;
hasOwnProperty必須使用
```
for(var i in your_object) {
if (Object.hasOwnProperty.call(your_object, i)) {
your_object[i] = false;
}
}
```
感謝,請寫一個答案! – chefcurry7
這個怎麼樣,如果你已經處理了'filter',那麼'filter:{}'? – Aruna