为了账号安全,请及时绑定邮箱和手机立即绑定

根据布尔属性将对象数组减少为字符串数组

根据布尔属性将对象数组减少为字符串数组

凤凰求蛊 2023-08-18 17:37:36
我想根据布尔属性将对象数组减少为字符串数组。我的对象数组如下所示:diet: [ { slug: "dairy-free", selected: true, }, { slug: "fish", selected: false, }, { slug: "meat", selected: false, }, { slug: "poultry", selected: true, }, { slug: "vegetarian", selected: true, }, ]如果所选值为 true,我的理想结果将是一个字符串数组。["dairy-free", "poultry", "vegetarian"]
查看完整描述

4 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

你只需要filter和map。


使用filter你将得到那些selected真正有价值的人。用于将这些对象的值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)


查看完整回答
反对 回复 2023-08-18
?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

您可以使用方法来过滤选择值为 true 的filter记录。这将返回满足条件的对象数组


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


查看完整回答
反对 回复 2023-08-18
?
桃花长相依

TA贡献1860条经验 获得超8个赞

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将是推荐的方法,因为您只在数组上迭代一次


查看完整回答
反对 回复 2023-08-18
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

另一种方式可能是


final newList = diet.fold<List>([], (previousValue, e) {

      if (e["selected"]) {

        previousValue.add(e["slug"]);

      }

      return previousValue;

    });


查看完整回答
反对 回复 2023-08-18
  • 4 回答
  • 0 关注
  • 115 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信