[英]How to extract first element of each child array in multidimensional array?
I have a multidimensional array: 我有一个多维数组:
var array 1 =
[
[[Name 1, 2, Nigeria],
[Name 3, 52, Egypt],
[Name 5, 75, South Africa]]
[[Name 5, 8, Nigeria],
[Name 1, 62, Egypt],
[Name 3, 115, South Africa]]
[[Name 6, 88, Nigeria],
[Name 3, 92, Egypt],
[Name 5, 825, South Africa]]
]
I want to have a new flat array: 我想要一个新的平面数组:
var array 2 = [Name 1, Name 3, Name 5, Name 5, Name 1, Name 3, Name 6, Name 3, Name 5]
I've tried writing a function that maps over the array and returns the first element: 我尝试编写一个映射到数组并返回第一个元素的函数:
function name(filteredName){
filteredName.map(function(firstName){
return firstName[0]
})
} }
However, this just returns: 但是,这仅返回:
[Name 1, Name 1, Name 1]
I'm really not sure how to solve this! 我真的不确定如何解决这个问题! Any help would be great.
任何帮助都会很棒。
You can use nested map()
and then flat()
您可以使用嵌套的
map()
然后再使用flat()
var arr = [ [['Name 1', 2, 'Nigeria'], ['Name 3', 52, 'Egypt'], ['Name 5', 75, 'South Africa']], [['Name 5', 8, 'Nigeria'], ['Name 1', 62, 'Egypt'], ['Name 3', 115, 'South Africa']], [['Name 6', 88, 'Nigeria'], ['Name 3', 92, 'Egypt'], ['Name 5', 825, 'South Africa']] ]; const res = arr.map(x => x.map(a => a[0])).flat(2) console.log(res)
flat()
flat()
You can do that without using flat()
using concat()
and spread operator. 您可以使用
concat()
和spread运算符而无需使用flat()
来做到这一点。
var arr = [ [['Name 1', 2, 'Nigeria'], ['Name 3', 52, 'Egypt'], ['Name 5', 75, 'South Africa']], [['Name 5', 8, 'Nigeria'], ['Name 1', 62, 'Egypt'], ['Name 3', 115, 'South Africa']], [['Name 6', 88, 'Nigeria'], ['Name 3', 92, 'Egypt'], ['Name 5', 825, 'South Africa']] ]; const res = [].concat(...arr.map(x => x.map(x => x[0]))) console.log(res)
I loop over the first array. 我遍历第一个数组。 In that loop, I loop over the second one and push the first entry.
在该循环中,我遍历第二个并推入第一个条目。
var array = [ [['Name 1', 2, 'Nigeria'], ['Name 3', 52, 'Egypt'], ['Name 5', 75, 'South Africa']], [['Name 5', 8, 'Nigeria'], ['Name 1', 62, 'Egypt'], ['Name 3', 115, 'South Africa']], [['Name 6', 88, 'Nigeria'], ['Name 3', 92, 'Egypt'], ['Name 5', 825, 'South Africa']], ]; var result = [] for (var i = 0; i < array.length; i++) { for (var j = 0; j < array[i].length; j++) { result.push(array[i][j][0]) } } console.log(result)
You could use a combination of map
and flatMap
like this: 您可以像这样使用
map
和flatMap
的组合:
const array1 = [ [['Name 1', 2, 'Nigeria'], ['Name 3', 52, 'Egypt'], ['Name 5', 75, 'South Africa']], [['Name 5', 8, 'Nigeria'], ['Name 1', 62, 'Egypt'], ['Name 3', 115, 'South Africa']], [['Name 6', 88, 'Nigeria'], ['Name 3', 92, 'Egypt'], ['Name 5', 825, 'South Africa']] ]; const output = array1.flatMap(a => a.map(b => b[0])) console.log(output)
If flatMap
is not supported, you could use a simple nested for...of
loop: 如果不支持
flatMap
则可以使用简单的for...of
循环嵌套:
var array1 = [ [['Name 1', 2, 'Nigeria'], ['Name 3', 52, 'Egypt'], ['Name 5', 75, 'South Africa']], [['Name 5', 8, 'Nigeria'], ['Name 1', 62, 'Egypt'], ['Name 3', 115, 'South Africa']], [['Name 6', 88, 'Nigeria'], ['Name 3', 92, 'Egypt'], ['Name 5', 825, 'South Africa']] ]; var output = []; for (var arr of array1) { for (var arr2 of arr) { output.push(arr2[0]) } } console.log(output)
You can use Array.flat() and Array.map() like this: 您可以使用Array.flat()和Array.map()是这样的:
array1.flat().map(arr => arr[0]);
Or you can use Array.concat() instead of Array.flat(): 或者你可以使用Array.concat()代替Array.flat():
[].concat(...array1).map(arr => arr[0]);
Working example : 工作示例 :
var array1 = [ [ ['Name 1', 2, 'Nigeria'], ['Name 3', 52, 'Egypt'], ['Name 5', 75, 'South Africa'] ], [ ['Name 5', 8, 'Nigeria'], ['Name 1', 62, 'Egypt'], ['Name 3', 115, 'South Africa'] ], [ ['Name 6', 88, 'Nigeria'], ['Name 3', 92, 'Egypt'], ['Name 5', 825, 'South Africa'] ] ]; const NamesArr = array1.flat().map(arr => arr[0]); console.log(NamesArr); console.log('Array.concat():'); console.log([].concat(...array1).map(arr => arr[0]));
Flatten your array before using .map
. 在使用
.map
之前,将数组展平。 That way, you will not be working with a multidimensional array and it will be easier to get the first element of each array: 这样,您将不再使用多维数组,并且更容易获得每个数组的第一个元素:
var arr = [ [['Name 1', 2, 'Nigeria'], ['Name 3', 52, 'Egypt'], ['Name 5', 75, 'South Africa']], [['Name 5', 8, 'Nigeria'], ['Name 1', 62, 'Egypt'], ['Name 3', 115, 'South Africa']], [['Name 6', 88, 'Nigeria'], ['Name 3', 92, 'Egypt'], ['Name 5', 825, 'South Africa']] ] console.log(arr.flat().map(item => item[0]))
.flat
does not have huge support yet, you can either use a polyfill if you want to use the latest code standard or use the spread operator to flatten your array: .flat
没有巨大的支持还没有,你可以使用一个填充工具 ,如果你想使用最新的编码标准或使用扩操作扁平化您的数组:
var arr = [ [['Name 1', 2, 'Nigeria'], ['Name 3', 52, 'Egypt'], ['Name 5', 75, 'South Africa']], [['Name 5', 8, 'Nigeria'], ['Name 1', 62, 'Egypt'], ['Name 3', 115, 'South Africa']], [['Name 6', 88, 'Nigeria'], ['Name 3', 92, 'Egypt'], ['Name 5', 825, 'South Africa']] ] console.log([].concat(...arr).map(item => item[0]))
you could also do it with forEach and spread syntax 你也可以用foreach和传播语法做
var flatArr = [];
array_1.forEach((arr, i) => {
arr.forEach(innerArr => {
flatArr = [...flatArr, innerArr[0]]
})
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.