让我们说,使用JSON.parse,我已经在一个数组中得到了4个可能的答案(就像一个选择题)。该数组的每个值都有一个“特性”(我不知道如何称呼它)。我希望通过数组的每个值寻找一个特定的特征,并筛选出那些不符合条件的值。
示例数组:
0: {correct: false}
1: {correct: true}
2: {correct: false}
3: {correct: false}数组的第一个值(1)是正确的答案,因为它的“特性”表示它是“真”。我想让控制台打印出正确值的数量。
正确的答案是:1
谢谢你的帮助
发布于 2019-04-19 07:51:16
作为Maheer Ali said,您可以使用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(', ')}`);
发布于 2019-04-19 07:39:59
您可以使用findIndex(),它返回与条件匹配的数组第一个元素的索引。
const arr = [
{correct: false},
{correct: true},
{correct: false},
{correct: false},
]
console.log(`the correct answer is` + arr.findIndex(x => x.correct))
https://stackoverflow.com/questions/55758264
复制相似问题