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”列中的所有内容都将压缩为一个。我想-我更改了格式,这样我(和其他人)可以更清楚地看到它。分离第一行,然后循环遍历数组,检查列应该放在哪个数组中。你试过什么了吗?将与[“苹果”、“梨”、“香蕉”]索引匹配的子数组数字组合起来。请添加你试过的代码