JS阵列过滤功能 - 返回?

时间:2018-05-18 14:49:42

标签: javascript jquery arrays

不使用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") 
});

3 个答案:

答案 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循环。