Javascript 如何对嵌套数组的元素进行分组?
有一个数组:Javascript 如何对嵌套数组的元素进行分组?,javascript,Javascript,有一个数组: var ind = ["Apple", "Pear", "Banana"]; 和另一个阵列: var arr = [ ["Apple", "Banana", "Pear", "Pear", "Apple", "Apple", "Banana"], [ 11, 12, 34, 54, 76, 23, 232 ], [ 33, 54, 22, 11, 23, 2
var ind = ["Apple", "Pear", "Banana"];
和另一个阵列:
var arr = [
["Apple", "Banana", "Pear", "Pear", "Apple", "Apple", "Banana"],
[ 11, 12, 34, 54, 76, 23, 232 ],
[ 33, 54, 22, 11, 23, 21, 33 ]
];
如何在数组ind中按顺序组合子数组的所有值,使其如下所示:
var arr = [
[ "Apple", "Pear", "Banana" ],
[ [11, 76, 23], [34, 54], [12, 232]],
[ [33, 23, 21], [22, 11], [54, 33] ]
];
您可以使用
reduce
和forEach
方法创建新数组,并基于ind
数组中相同元素的第一行和索引中的indexOf
当前元素添加子数组
var ind=[“苹果”、“梨”、“香蕉”];
var arr=[
[“苹果”、“香蕉”、“梨”、“梨”、“苹果”、“苹果”、“香蕉”],
[11, 12, 34, 54, 76, 23, 232],
[33, 54, 22, 11, 23, 21, 33]
];
const first=arr[0];
const result=arr.slice(1)。reduce((r,e,i)=>{
常数a=r[i+1]=[];
e、 forEach((el,j)=>{
常数索引=ind.indexOf(第一个[j])
如果(!a[index])a[index]=[el];
else a[索引].推送(el)
})
返回r;
},[ind])
console.log(result)
您可以使用reduce
和forEach
方法创建新数组,并基于indexOf
数组中第一行的当前元素和同一元素的索引添加子数组
var ind=[“苹果”、“梨”、“香蕉”];
var arr=[
[“苹果”、“香蕉”、“梨”、“梨”、“苹果”、“苹果”、“香蕉”],
[11, 12, 34, 54, 76, 23, 232],
[33, 54, 22, 11, 23, 21, 33]
];
const first=arr[0];
const result=arr.slice(1)。reduce((r,e,i)=>{
常数a=r[i+1]=[];
e、 forEach((el,j)=>{
常数索引=ind.indexOf(第一个[j])
如果(!a[index])a[index]=[el];
else a[索引].推送(el)
})
返回r;
},[ind])
log(result)
您可以将数组作为获取正确索引的助手,通过获取索引并将值收集到索引中来减少数组
var列=[“苹果”、“梨”、“香蕉”],
数据=[“苹果”、“香蕉”、“梨”、“梨”、“苹果”、“苹果”、“香蕉”],[11,12,34,54,76,23,232],[33,54,22,11,23,21,33],
索引=数据[0]。映射(v=>columns.indexOf(v)),
result=[columns,…data.slice(1).map(a=>a.reduce((r,v,i)=>{
(r[index[i]]=r[index[i]| |[])。推(v);
返回r;
}, []))];
控制台日志(结果)代码>
.as console wrapper{max height:100%!important;top:0;}
您可以将数组作为获取正确索引的助手,并通过获取索引和收集索引中的值来减少数组
var列=[“苹果”、“梨”、“香蕉”],
数据=[“苹果”、“香蕉”、“梨”、“梨”、“苹果”、“苹果”、“香蕉”],[11,12,34,54,76,23,232],[33,54,22,11,23,21,33],
索引=数据[0]。映射(v=>columns.indexOf(v)),
result=[columns,…data.slice(1).map(a=>a.reduce((r,v,i)=>{
(r[index[i]]=r[index[i]| |[])。推(v);
返回r;
}, []))];
控制台日志(结果)代码>
.as console wrapper{max height:100%!important;top:0;}
您可以reduce
根据头部索引将值合并为一个值
var ind=[“苹果”、“梨”、“香蕉”];
var[头部,…静止]=[
[“苹果”、“香蕉”、“梨”、“梨”、“苹果”、“苹果”、“香蕉”],
[ 11, 12, 34, 54, 76, 23, 232 ],
[ 33, 54, 22, 11, 23, 21, 33 ]
];
let out=[ind,…rest.map(row=>Object.values(row.reduce((acc,curr,i)=>(acc[head[i]].push(curr,acc),ind.reduce((acc,curr)=>(acc[curr]=[],acc),{}));
console.log(out)
您可以reduce
根据head的索引将值合并为一个值
var ind=[“苹果”、“梨”、“香蕉”];
var[头部,…静止]=[
[“苹果”、“香蕉”、“梨”、“梨”、“苹果”、“苹果”、“香蕉”],
[ 11, 12, 34, 54, 76, 23, 232 ],
[ 33, 54, 22, 11, 23, 21, 33 ]
];
let out=[ind,…rest.map(row=>Object.values(row.reduce((acc,curr,i)=>(acc[head[i]].push(curr,acc),ind.reduce((acc,curr)=>(acc[curr]=[],acc),{}));
console.log(out)
数字groupoing背后的逻辑是什么?@AndreaFacchini似乎或多或少是一个“表”。“Apple”列中的所有内容都将压缩为一个。我想-我更改了格式,这样我(和其他人)可以更清楚地看到它。分离第一行,然后循环遍历数组,检查列应该放在哪个数组中。你试过什么了吗?将与[“苹果”、“梨”、“香蕉”]索引匹配的子数组数字组合起来。请添加你尝试过的代码。数字分组背后的逻辑是什么?@AndreaFacchini似乎或多或少是一个“表”。“Apple”列中的所有内容都将压缩为一个。我想-我更改了格式,这样我(和其他人)可以更清楚地看到它。分离第一行,然后循环遍历数组,检查列应该放在哪个数组中。你试过什么了吗?将与[“苹果”、“梨”、“香蕉”]索引匹配的子数组数字组合起来。请添加你试过的代码