不使用ES6(箭头语法),过滤功能是否需要返回?如果是,我可以将这2个filter()合并为一个吗?
cars.filter(function(car, index) {
return car[0].setAttribute("data-original-position", index)
});
cars.filter(function(car) {
return car[0].setAttribute("data-preferred", "N")
});
答案 0 :(得分:1)
是的,它确实需要一个return
,因为您没有使用ES6箭头函数,它们具有隐式返回。
此外,您使用filter
作为迭代器 - 虽然它有效但您可能会认为您没有正确使用它,并且当他们遇到此代码时,很可能会让您和其他同事感到困惑。
正常for循环会更好,更具可读性。
for (let i = 0; i < cars.length; i++) {
cars[i].setAttribute("data-original-position", index);
cars[i].setAttribute("data-preferred", "N");
}
答案 1 :(得分:0)
是的,filter
需要返回虚假或真值。
在您的情况下,由于setAttribute
,您的函数始终返回undefined。
如果你返回一个truthy值,那么一个值将进入一个新数组。
答案 2 :(得分:0)
myArray.filter(predicateFunction)
返回一个数组,其中包含predicateFunction(element)
返回true
的所有元素。
示例:
function predicateFunction(element) {
return element === 'red'
}
const myArray = ['red', 'blue'];
const filteredArray = myArray.filter(predicateFunction);
console.log(filteredArray) // => returns ['red']
因此,predicateFunction
需要返回一个布尔值。如果你使用没有花括号的箭头函数(只有一个语句),它们将有一个隐式返回。
在你的情况下,car[0].setAttribute("data-preferred", "N")
似乎没有返回布尔值。 filter
可能不适合您。根据您的需要,您可能希望改为查看for
循环。