我正在尝试查找第一个processed === true
并返回value
。
我的作品似乎工作,但如果没有processed
的代码变成undefined
而不是<empty string>
const values = [{
value: "bar",
process: false
},
{
value: "foo",
process: false
}
];
const myValue = values.reduce((acc, curr) => {
if (curr.primary) {
return curr.value.toLowerCase();
}
}, '');
console.log("My Value: " + myValue);
我错过了什么?
5条答案
按热度按时间cnwbcb6i1#
reduce
为循环中的每个项目调用一次回调函数。curr
是当前值。acc
是上一个函数的返回值(或第一次循环时的第二个参数(''
))。您的代码完全忽略了
acc
,因此reduce
返回的值 * 完全 * 依赖于数组中的最后一个值。你的函数用
curr.primary
来测试这个值。如果它是一个真值,那么它就是return curr.value.toLowerCase()
。如果它不是一个真值,那么它就到达函数的结尾,而不命中return
语句。任何不执行return
的函数都将返回undefined
。若要查找与条件匹配的第一个值,请使用
find
而不是reduce
。然后做一个测试,如果你没有找到任何东西,就使用一个空字符串。
hgqdbh6s2#
我试图找到第一个
processed === true
并返回value
[否则为空字符串""
]。在找不到值的情况下,可以将
Array.prototype.find()
与optional chaining operator (?.
)以及nullish coalescing operator (??
)一起使用:下面是对第一个值的语法求值的详细说明:
与从第二个数组计算的值相比:
bxpogfeg3#
要找到满足条件的第一个元素,您应该使用find method。Reduce将在整个数组上运行,即使在满足条件后也是如此,因为它的目的是将整个数组 reduce 为不同的数据结构(即字符串/对象)。Find方法将在找到满足条件的项后立即退出(如果没有项满足,则在检查整个数组后退出)
至于用空字符串替换
undefined
,在所附的代码片段中,我使用了or condition(尽管有些人更喜欢conditional operator),因为undefined
是falsey,所以它将插入空字符串。祝你的项目好运:)
n6lpvg4x4#
这应该是所有:
mepcadol5#
你最好使用foreach循环来完成你要做的事情: