Javascript 如何使用下划线';返回多维数组中的第一项的链式方法?
假设我有一个数组,我想返回数组中每个数组的第一个元素:Javascript 如何使用下划线';返回多维数组中的第一项的链式方法?,javascript,underscore.js,chaining,chain,Javascript,Underscore.js,Chaining,Chain,假设我有一个数组,我想返回数组中每个数组的第一个元素: array = [[["028A","028B","028C","028D","028E"], ["028F","0290","0291","0292","0293"], ["0294","0295","0296","0297","0298"], ["0299","029A","029B","029C","029D"], ["029E","029F","02A0
array = [[["028A","028B","028C","028D","028E"],
["028F","0290","0291","0292","0293"],
["0294","0295","0296","0297","0298"],
["0299","029A","029B","029C","029D"],
["029E","029F","02A0","02A1","02A2"]],
[["02A3","02A4"],
["02A5", "02A6"]];
我知道我可以做这样的事情:
var firsts = [];
_.each(array, function(item){
_.each(item, function(thisitem){
firsts.push(_.first(thisitem));
});
});
但是,如果我想使用下划线的\uu.chain()
方法来执行该操作,该怎么办?只是学习下划线,到目前为止似乎非常有用。您可以通过以下方式完成:
演示:
使用flatten(true)
将数组数组转换为数组数组,然后map
剥离每个内部数组的第一个元素
如果您想要比映射
更短的内容,可以使用来拉出内部数组的第一个元素:
var firsts = _.chain(array)
.flatten(true) // This true is important.
.pluck(0)
.value();
演示:
只是一个map
调用:
// Convenience version of a common use case of `map`: fetching a property.
_.pluck = function(obj, key) {
return _.map(obj, function(value){ return value[key]; });
};
这一个看起来更像Ruby中使用的.map(&:first)
,因此,当您习惯于抓取时,它可能对某些人更熟悉,也更简洁。如果您真的想要一些rubysh,您可以使用带有map
的非匿名函数:
var first = function(a) { return a[0] };
var firsts = _.chain(array)
.flatten(true) // This true is important.
.map(first)
.value();
在这种情况下,我发现弹拨的使用非常有趣。它为提取秒数、三分之一等铺平了道路。Rubish解决方案从一开始就使用下划线,可以使用以下代码作为第一行:var first=function(a){return}.first(a);}
@ChaosManor:你甚至不需要在下划线中使用第一个
。第一个
,你可以说.map(u.first)
。
var first = function(a) { return a[0] };
var firsts = _.chain(array)
.flatten(true) // This true is important.
.map(first)
.value();