![](/img/trans.png)
[英]Reduce JavaScrip Array of Objects based on boolean property value
[英]Reduce array of objects to string array based on boolean property
我想根據布爾屬性將對象數組減少為字符串數組。
我的對象數組如下所示:
diet: [ { slug: "dairy-free", selected: true, }, { slug: "fish", selected: false, }, { slug: "meat", selected: false, }, { slug: "poultry", selected: true, }, { slug: "vegetarian", selected: true, }, ]
如果選定的值為真,我的理想結果將是一個字符串數組。
["dairy-free", "poultry", "vegetarian"]
您可以使用filter
方法過濾選擇值為 true 的記錄。 這將返回滿足條件的對象數組
var diet = [ { slug: "dairy-free", selected: true, }, { slug: "fish", selected: false, }, { slug: "meat", selected: false, }, { slug: "poultry", selected: true, }, { slug: "vegetarian", selected: true, }, ] console.log(diet.filter(e => e.selected))
如果只想返回slug屬性,可以結合使用filter
和map
方法
var diet = [ { slug: "dairy-free", selected: true, }, { slug: "fish", selected: false, }, { slug: "meat", selected: false, }, { slug: "poultry", selected: true, }, { slug: "vegetarian", selected: true, }, ] console.log(diet.filter(e => e.selected == true).map(e => e.slug))
你只需要filter
和map
。
使用filter
您將獲得selected
值為 true 的值。 而map
用於將這些對象的slug
值映射到數組中。
var diet = [ { slug: "dairy-free", selected: true, }, { slug: "fish", selected: false, }, { slug: "meat", selected: false, }, { slug: "poultry", selected: true, }, { slug: "vegetarian", selected: true, }, ] var newArray = diet.filter(f => f.selected).map(m => m.slug) console.log(newArray)
像這樣使用Array
函數filter
和map
的組合:
let diet= [ { slug: "dairy-free", selected: true, }, { slug: "fish", selected: false, }, { slug: "meat", selected: false, }, { slug: "poultry", selected: true, }, { slug: "vegetarian", selected: true, }, ] let selected=diet.filter(type=>type.selected).map(selectedType=>selectedType.slug) console.log(selected)
不幸的是,這需要對數組進行兩次迭代,一次過濾掉selected
,一次只返回slug
您也可以像這樣使用reduce
來獲得相同的結果
let diet= [ { slug: "dairy-free", selected: true, }, { slug: "fish", selected: false, }, { slug: "meat", selected: false, }, { slug: "poultry", selected: true, }, { slug: "vegetarian", selected: true, }, ] let reduced = diet.reduce((filtered, option)=> { if (option.selected) { filtered.push(option.slug); } return filtered; }, []); console.log(reduced)
reduce
將是推薦的方法,因為您只在數組上迭代一次
另一種方式可能是
final newList = diet.fold<List>([], (previousValue, e) {
if (e["selected"]) {
previousValue.add(e["slug"]);
}
return previousValue;
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.