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

根据每个值的内容过滤出JSON数组

根据每个值的内容过滤出JSON数组

桃花长相依 2021-05-01 16:11:36
可以说,使用JSON.parse我在一个数组中获得了4个可能的答案(如多项选择测验)。该数组的每个值都有一个“特征”(我不知道怎么称呼它)。我想通过数组的每个值寻找一个特定的特征,并过滤掉那些不符合条件的值。数组示例:0: {correct: false}1: {correct: true}2: {correct: false}3: {correct: false}数组的第一个值(1)是正确的答案,因为它的“特性”通过说它是“ true”来表示。我想使控制台打印出正确值的数字。示例:正确的答案是:1谢谢你的帮助
查看完整描述

2 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

正如Maheer Ali所说的,您可以使用Array#findIndex,但是它将返回一个值-满足条件的第一个值。在您的示例中,如果您有许多correct键等于的对象true,您仍将获得其中之一。


因此,如果您希望所有对象都满足要求,则有许多解决方案。


Array#reduce

正如Maheer Ali在评论中建议的那样,您可以尝试使用Array#reduce。


更短,并且在数组上具有唯一的循环:


const arr = [

     {correct: false},

     {correct: true},

     {correct: false},

     {correct: true},

  ],

  filtered = arr.reduce((acc, item, index) => ((item.correct) ? [...acc, index] : acc), []);


console.log(`the correct answers are ${filtered.join(', ')}`);

Array#map 和 Array#filter

尝试Array#map(Array#filter用于删除false值):


const arr = [

     {correct: false},

     {correct: true},

     {correct: false},

     {correct: true},

  ],

  filtered = arr.map((item, index) => ((item.correct) ? index : false)).filter((item) => (item));


console.log(`the correct answers are ${filtered.join(', ')}`);

但是,该数组将循环两次(一次是Array#map,另一次是Array#filter。)。


for...in 陈述

最终,您可以通过循环遍历原始索引,将索引推入一个空数组中,以实现此目的for...in:


const arr = [

     {correct: false},

     {correct: true},

     {correct: false},

     {correct: true},

  ],

  filtered = [];

  

for (let index in arr) {

  if (arr[index].correct) {

    filtered.push(index);

  }

}


console.log(`the correct answers are ${filtered.join(', ')}`);


查看完整回答
反对 回复 2021-05-06
?
江户川乱折腾

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

您可以使用findIndex()which返回匹配条件的数组第一个元素的索引。


const arr = [

   {correct: false},

   {correct: true},

   {correct: false},

   {correct: false},

]


console.log(`the correct answer is` + arr.findIndex(x => x.correct))


查看完整回答
反对 回复 2021-05-06
  • 2 回答
  • 0 关注
  • 208 浏览
慕课专栏
更多

添加回答

举报

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