Javascript 带返回赋值的箭头函数即使使用括号也不起作用
我有以下过滤器:Javascript 带返回赋值的箭头函数即使使用括号也不起作用,javascript,Javascript,我有以下过滤器: const auxHash = {}; myArray.filter(house => house.members === 3 && auxHash[house.id] ? false : auxHash[house.id] = true ) 我得到一个lint错误,它说arrow函数不应该返回赋值。我也试过: const auxHash = {}; myArray.filter(house => house.members === 3
const auxHash = {};
myArray.filter(house =>
house.members === 3 &&
auxHash[house.id] ? false : auxHash[house.id] = true
)
我得到一个lint错误,它说arrow函数不应该返回赋值。我也试过:
const auxHash = {};
myArray.filter(house =>
house.members === 3 &&
auxHash[house.id] ? false : (auxHash[house.id] = true)
)
但同样的问题。我怎样才能解决这个问题
澄清。我正在尝试筛选出属性成员不同于3
的数组元素,并且我正在尝试基于属性id
删除重复元素(这就是我使用哈希的原因)。编辑问题之前
如果使用{}
body,则需要显式返回该函数的结果
const auxHash = {};
myArray.filter(house => {
return house.members === 3 && auxHash[house.id] ? false : auxHash[house.id] = true;
})
另外,如果语句只有一行,则可以省略{}
部分并删除return
const auxHash = {};
myArray.filter(house => house.members === 3 && auxHash[house.id] ? false : auxHash[house.id] = true)
您正在重新格式化完全相同的语句,并忽略linter的错误。您正在返回作业。这是你的问题。你就在这里做-auxHash[house.id]=true
您的三元解析为false或auxHash[house.id]=true
因此,重构以返回实际值-
const auxHash = {};
myArray.filter(house => {
if(house.members === 3 && auxHash[house.id]) {
return false;
} else {
auxHash[house.id] = true;
return true;
}
});
您可以更简洁地编写它,但我将其展开以明确说明。当您使用{}它是有效的JavaScript时,没有返回,但当用作箭头函数的返回值时,它不是好代码,正如错误所述……更新后,我没有使用{}
尽管我也用explicitreturn
尝试过。如果我按照你的建议去做,linter会抱怨的。仍然说这不应该返回赋值。linter是对的,通常你不应该修改过滤器函数中的数组元素。我不是在修改数组元素。我正在修改未筛选的哈希。