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

可以说,使用JSON.parse我在一个数组中获得了4个可能的答案(如多项选择测验)。该数组的每个值都有一个“特征”(我不知道怎么称呼它)。我想通过数组的每个值寻找一个特定的特征,并过滤掉那些不符合条件的值。


数组示例:


0: {correct: false}

1: {correct: true}

2: {correct: false}

3: {correct: false}

数组的第一个值(1)是正确的答案,因为它的“特性”通过说它是“ true”来表示。我想使控制台打印出正确值的数字。


示例:正确的答案是:1


谢谢你的帮助


桃花长相依
浏览 209回答 2
2回答

繁花如伊

正如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(', ')}`);

江户川乱折腾

您可以使用findIndex()which返回匹配条件的数组第一个元素的索引。const arr = [   {correct: false},   {correct: true},   {correct: false},   {correct: false},]console.log(`the correct answer is` + arr.findIndex(x => x.correct))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript