是否可以在JavaScript的if语句中使用映射函数和过滤函数?



我有一个名为place的数组对象data。当位置数组进入解决方案函数时,如果位置中的对象有一个名为"BOX"的TYPE,我想通过减去&;container &;的TYPE数据,只提取具有'BOX' TYPE的placeId数组。此外,如果没有'BOX' TPYE,只有CONTAINER TYPE,我想只提取placeId数组与" CONTAINER "打字。

我尝试在if语句中使用映射函数和过滤函数,但它未能提取数据,我的代码看起来也不太好。我如何修复代码?

const place = [
{type: "CONTAINER", placeId: 252 }
]
const place = [
{type: "CONTAINER", placeId: 252 }, {type: "BOX", placeId: 257}, {type: "BOX", placeId: 258}
]

function solution(place) {

if(plaecs.map((v) => v.type === 'BOX')) {
return plaecs.filter((v) => v.type !== 'CONTAINER')
} else if (plaecs.map((v) => v.type !== 'BOX')) {
return plaecs.filter((v) => v.type === "CONTAINER")
}

}
solution(place)
</script>
</body>
</html>

solution(place)    expected answer : [252]
solution(place)    expected answer : [ 257, 258]

map方法返回一个数组。使用if (someArray)将总是进入if的主体,因为所有数组都是真值(甚至是空数组)。

您可能正在寻找some方法:

if (plaecs.some((v) => v.type === 'BOX')) {

some方法确定数组中的任何元素是否与回调定义的谓词匹配:¹它使用数组的第一个元素调用回调,如果回调返回真值,则停止并返回true;否则,它使用数组的第二个元素调用回调函数,并应用相同的逻辑;等。如果回调函数没有返回真值,则some返回false(包括空数组)。


¹那么为什么叫some而不是any呢?因为它是在2009年添加的,并且一些库已经向语义略有不同的数组添加了any方法,并且对现有代码的分析表明,添加any将破坏该代码。所以他们选择了第二好的名字:some

相关内容

  • 没有找到相关文章

最新更新