过滤JavaScript数组

过滤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

我试图从这个数组中只返回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.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
请添加所需的输出。