我有一个名为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
。