簡體   English   中英

基於布爾屬性將對象數組減少為字符串數組

[英]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屬性,可以結合使用filtermap方法

 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))

你只需要filtermap

使用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函數filtermap的組合:

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM