Javascript JS数组过滤函数-返回?

Javascript JS数组过滤函数-返回?,javascript,jquery,arrays,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") }); 是的,它确实需

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

是的,它确实需要一个
返回值
,因为您没有使用ES6 arrow函数,它具有隐式返回

此外,您正在使用
filter
作为迭代器-虽然它有效,但您可能会认为您没有正确使用它,并且在遇到此代码时很可能会让您自己和其他同事感到困惑

一个普通的for循环会更好,可读性更好

for (let i = 0; i < cars.length; i++) {
    cars[i].setAttribute("data-original-position", index);
    cars[i].setAttribute("data-preferred", "N");
}
for(设i=0;i
是,
过滤器
需要返回假值或真值。 在您的情况下,由于
setAttribute
,函数总是返回未定义。 如果您返回一个truthy值,那么一个值将进入一个新数组。

myArray.filter(predicateFunction)
返回一个数组,其中包含该
predicateFunction(element)
的所有元素

例如:

function predicateFunction(element) {
  return element === 'red'
}
const myArray = ['red', 'blue'];
const filteredArray = myArray.filter(predicateFunction);
console.log(filteredArray) // => returns ['red']
因此,
predicateFunction
需要返回一个布尔值。如果使用不带大括号的箭头函数(只有一条语句),它们将有一个隐式返回


在您的示例中,
car[0]。setAttribute(“数据首选”,“N”)
似乎不返回布尔值<代码>过滤器可能不是适合您的正确方法。根据需要,您可能需要查看
for
循环。

如果需要一个接一个地进行双重筛选,则可能选择了错误的数组。方法。
filter()
确实需要返回,但看起来您没有正确使用该方法,因为您没有使用函数中的逻辑来限制数组中的数据
forEach()
可能更符合您的需要,但是您使用的是
car[0]
这一事实意味着您甚至不需要循环。查找
forEach()
。在
filter()
方法的每次迭代中,您都在更新相同的
car[0]
数组元素(正如其他人所说,这是一个错误的方法);为什么?对不起,这是我写的最糟糕的答案。没想到它是从我身上出来的。
:(
我想我喝醉了(在梦中)。map()不也需要返回吗?如果使用map,我怎么能同时执行这两个setAttributes?
map()
也不正确,因为没有生成数组。
forEach()
是他正在寻找的方法。
.map()
也需要返回,因为您使用的是普通函数,所以它们总是需要返回。我想如果您需要修改元素,并且希望两个数组指向相同的元素。在
map()中
例如,
cars
newCars
是指向相同修改对象的两个数组。如果对原始数组进行变异,则使用
map
仍然没有意义。无论如何,这是迄今为止最好的答案。