过滤JavaScript数组
我试图从这个数组中只返回1,但我很难找出我的代码有什么问题过滤JavaScript数组,javascript,Javascript,我试图从这个数组中只返回1,但我很难找出我的代码有什么问题 let arr = [[1],[1,2],[3],[1,2],[4],[1,2],[1]]; let ok = arr.filter((x) => { if(x.length > 1){ return x.filter((y) => { return y == 1; }) }else{ return x == 1; } }) console.log(ok); 您的内部x
let arr = [[1],[1,2],[3],[1,2],[4],[1,2],[1]];
let ok = arr.filter((x) => {
if(x.length > 1){
return x.filter((y) => {
return y == 1;
})
}else{
return x == 1;
}
})
console.log(ok);
您的内部
x.filter
返回一个新的过滤数组。但这并没有真正被使用,因为它被传递到外部过滤器,然后外部过滤器将以此来决定是否过滤外部过滤器。所以实际上,看起来外部的过滤器实际上应该映射:
let ok = arr.map(inner => inner.filter(el => el === 1));
您也不需要使用if
语句,因为代码仍然有效。Jonas在上面给出了一个非常好的答案,尽管我不确定这是被问到的问题。我有一种感觉:)您只需要与原始数组arr
完全相同的数组。如果是:
const arr = [[1],[1,2],[3],[1,2],[4],[1,2],[1]];
const ok = arr.filter(el => el.length === 1 && el[0] === 1) // [[1], [1]]
什么意思?你能给出一个你期望输出是什么的例子吗?返回x==1
-你正在将引用与此处的数字进行比较。你应该从.filter
返回一个布尔值,但你返回的是内部.filter
的结果,它是一个数组。@pwolaq实际上可以工作,如[1]==1
为“1”==1
为1==1
为true
请添加所需的输出。