Say I have an array of arrays, and I want to return the first element of each array within the array:
假设我有一个数组,我想返回数组中每个数组的第一个元素:
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"]];
I know I can do something like this:
我知道我可以做这样的事情:
var firsts = [];
_.each(array, function(item){
_.each(item, function(thisitem){
firsts.push(_.first(thisitem));
});
});
but what if I want to do it with underscore's _.chain()
method? Just learning underscore, and so far seems very useful.
但是,如果我想使用下划线的_.chain()方法怎么办?只是学习下划线,到目前为止看起来很有用。
1 个解决方案
#1
29
You could do it with flatten
and map
thusly:
你可以用平面图来做它:
var firsts = _.chain(array)
.flatten(true) // This true is important.
.map(function(a) { return a[0] })
.value();
Demo: http://jsfiddle.net/ambiguous/cm3CJ/
演示:http://jsfiddle.net/ambiguous/cm3CJ/
You use flatten(true)
to convert your array-of-arrays-of-arrays into an array-of-arrays and then the map
peels off the first element of each inner array.
您使用flatten(true)将数组的数组数组数组转换成数组的数组数组数组,然后映射剥离每个内部数组的第一个元素。
If you want something shorter than the map
, you could use pluck
to pull out the first element of the inner arrays:
如果你想要比地图短一些的东西,你可以使用拨动来提取内部数组的第一个元素:
var firsts = _.chain(array)
.flatten(true) // This true is important.
.pluck(0)
.value();
Demo: http://jsfiddle.net/ambiguous/pM9Hq/
演示:http://jsfiddle.net/ambiguous/pM9Hq/
_.pluck
is just a map
call anyway:
_。不过,“拔”只是一个地图呼叫:
// Convenience version of a common use case of `map`: fetching a property.
_.pluck = function(obj, key) {
return _.map(obj, function(value){ return value[key]; });
};
This one looks a lot more like the .map(&:first)
that you'd use in Ruby so it might be more familiar to some people and more concise once you're used to pluck
. If you really want something Rubyish, you could use a non-anonymous function with map
:
这个看起来更像你在Ruby中使用的.map(&:first),所以有些人可能更熟悉它,一旦你习惯了使用它,它会更简洁。如果你真的想要一些Rubyish,你可以使用一个非匿名函数和map:
var first = function(a) { return a[0] };
var firsts = _.chain(array)
.flatten(true) // This true is important.
.map(first)
.value();
#1
29
You could do it with flatten
and map
thusly:
你可以用平面图来做它:
var firsts = _.chain(array)
.flatten(true) // This true is important.
.map(function(a) { return a[0] })
.value();
Demo: http://jsfiddle.net/ambiguous/cm3CJ/
演示:http://jsfiddle.net/ambiguous/cm3CJ/
You use flatten(true)
to convert your array-of-arrays-of-arrays into an array-of-arrays and then the map
peels off the first element of each inner array.
您使用flatten(true)将数组的数组数组数组转换成数组的数组数组数组,然后映射剥离每个内部数组的第一个元素。
If you want something shorter than the map
, you could use pluck
to pull out the first element of the inner arrays:
如果你想要比地图短一些的东西,你可以使用拨动来提取内部数组的第一个元素:
var firsts = _.chain(array)
.flatten(true) // This true is important.
.pluck(0)
.value();
Demo: http://jsfiddle.net/ambiguous/pM9Hq/
演示:http://jsfiddle.net/ambiguous/pM9Hq/
_.pluck
is just a map
call anyway:
_。不过,“拔”只是一个地图呼叫:
// Convenience version of a common use case of `map`: fetching a property.
_.pluck = function(obj, key) {
return _.map(obj, function(value){ return value[key]; });
};
This one looks a lot more like the .map(&:first)
that you'd use in Ruby so it might be more familiar to some people and more concise once you're used to pluck
. If you really want something Rubyish, you could use a non-anonymous function with map
:
这个看起来更像你在Ruby中使用的.map(&:first),所以有些人可能更熟悉它,一旦你习惯了使用它,它会更简洁。如果你真的想要一些Rubyish,你可以使用一个非匿名函数和map:
var first = function(a) { return a[0] };
var firsts = _.chain(array)
.flatten(true) // This true is important.
.map(first)
.value();