Javascript从数组中筛选值

Javascript从数组中筛选值,javascript,arrays,ecmascript-5,Javascript,Arrays,Ecmascript 5,我有一个数组,每个数组包含两个元素。如何通过过滤第一个元素从数组返回第二个元素 例如,我有以下数组,我的函数应该返回每个子数组中的第二个元素,其中第一项是8: var array = [[8, 'first'], [8, 'second'], [1, 'empty'], [8, 'third'], [9, 'empty']]; 预期结果:[“第一”、“第二”、“第三”] 这是我到目前为止实现的,但它返回两个元素,而不是每个数组中具有匹配项的第二个元素 var数组=[[8'第一']、[8'第二

我有一个数组,每个数组包含两个元素。如何通过过滤第一个元素从数组返回第二个元素

例如,我有以下数组,我的函数应该返回每个子数组中的第二个元素,其中第一项是
8

var array = [[8, 'first'], [8, 'second'], [1, 'empty'], [8, 'third'], [9, 'empty']];
预期结果:
[“第一”、“第二”、“第三”]

这是我到目前为止实现的,但它返回两个元素,而不是每个数组中具有匹配项的第二个元素

var数组=[[8'第一']、[8'第二']、[1'空']、[8'第三']、[9'空'];
var result=array.filter(函数(项){
如果(项目[0]==8){
退货项目[1];
}
});

控制台日志(结果)您可以根据条件进行筛选,然后只需要映射所需的零件

在单个循环中,只能使用,因为在这里可以操作结果集的值

返回数组的原始项,不做任何更改

filter()
方法创建一个新数组,其中包含通过所提供函数实现的测试的所有元素

对于筛选,回调需要返回一个被解释为布尔值的值,这意味着每个truthy值(如对象、数组或任何非零数等)都会将该项作为结果集

如果您只想使用内部数组的一部分,并且该部分是truty值,那么过滤可以工作,但它不接受返回值,因为它不是为此而设计的

var数组=[[8'第一'],[8'第二'],[1'空'],[8'第三'],[9'空'],
结果=数组.filter(函数(项){
退货项目[0]==8;
}).
地图(功能(a){
返回[1];
});

控制台日志(结果)
Array.prototype.filter
返回传递所提供谓词的元素,因此在您的情况下,对于哪个项为true,它将是
item
。要实现您想要的功能,您需要首先过滤项目,然后使用
map
提取secon元素:

var数组=[[8'第一']、[8'第二']、[1'空']、[8'第三']、[9'空'];
var result=array.filter(函数(项){
退货项目[0]==8;
}).map(功能(项目){
退货项目[1];
});

控制台日志(结果)数组的filter方法通过在每次迭代中传递通过特定条件的项来创建一个新数组

试试这个:

var array = [[8, 'first'], [8, 'second'], [1, 'empty'], [8, 'third'], [9, 
'empty']],resArray = [];
array.forEach(function(item){
  if(parseInt(item[0]) === 8){
    resArray.push(item[1]);
  }
});
console.log(resArray);

首先映射,然后过滤以删除未定义的值

var数组=[[8'第一']、[8'第二']、[1'空']、[8'第三']、[9'空'];
var result=array.map(函数(项){
如果(项目[0]==8){
退货项目[1];
}
}).过滤器(功能(项目){
退货项目;
});

控制台日志(结果)您需要过滤掉不需要的条目,并将条目映射到条目中的第二个值

一般来说,最好的方法是
过滤
,然后
映射

var数组=[[8'第一']、[8'第二']、[1'空']、[8'第三']、[9'空'];
var result=array.filter(函数(项){return item[0]==8;})
.map(函数(项){返回项[1];});

控制台日志(结果)您可以使用函数
reduce

var数组=[[8'第一']、[8'第二']、[1'空']、[8'第三']、[9'空'];
var结果=数组.reduce(函数(acc,项){
如果(项目[0]==8){
附件推送(项目[1])
}
返回acc;
}, []);

控制台日志(结果)您可以利用Array.reduce实现所需的输出-

var array = [[8, 'first'], [8, 'second'], [1, 'empty'], [8, 'third'], [9, 'empty']];


array.reduce(function(i, n){
    if(n[0]==8){
        i.push(n[1]);
    }
    return i;
},[]);
//output : ['first', 'second', 'third']

filter
map
-我想你想要
map
(并过滤掉不想要的结果)我同意上面的评论:我想你需要重新阅读
filter
上的文档。根据过滤函数的返回,它将保留或不保留当前元素。它不会修改它,也不会使用你返回的对象。你能解释一下为什么这不起作用吗?var ans=array.filter((a)=>{if(a[0]==8)返回a[1]})我已经更新了我的答案。如果有更多问题,请告诉我,你能解释一下为什么这不起作用吗?var ans=array.filter((a)=>{if(a[0]==8)返回[1]})array#filter筛选数组,删除未通过“筛选测试”的元素,但不会以其他方式更改数组。数组#映射更改数组,但不删除elements@Valip,您可以稍后使用
result=result.slice(0,2)
为前2个元素对数组进行切片。