首页 > 解决方案 > 如何按标题对嵌套数组的元素进行分组?

问题描述

我已经问过一个问题——如何对嵌套数组的元素进行分组?,并得到了令人愉快的答复。这个问题会有点像,但不完全一样。

有一个数组:

var ind = ["Apple", "Pear", "Banana"];

还有另一个数组:

var arr = [
  [ "Pear",       12,       34,     54,     76,      23,      232    ],
  [ "Apple",      54,       22,     11,     23,      21,      33     ],
  [ "Banana",     54,       65,     11,     43,      66,      75     ],
  [ "Pear",       23,       11,     46,     76,      33,      98     ],
  [ "Apple",      12,       34,     54,     76,      23,      232    ],
  [ "Banana",     54,       22,     11,     23,      21,      33     ],
];

当子数组进入数组 ind 时,如何按顺序组合子数组的所有值,使其如下所示:

var arr = [
  ["Apple",  [54,12], [22,34], [11,54], [23,76], [21,23], [33,232]],
  ["Pear",   [12,23], [34,11], [54,46], [76,76], [23,33], [232,38]],
  ["Banana", [54,54], [65,22], [11,11], [43,23], [66,21], [75,33 ]]
];

标签: javascript

解决方案


根据数组过滤arr使用。然后使用在对象查找中生成所需的输出,然后使用.array#filterindarray#reduceObject.values()

const arr = [ [ "Pear", 12, 34, 54, 76, 23, 232 ], [ "Apple", 54, 22, 11, 23, 21, 33 ], [ "Banana", 54, 65, 11, 43, 66, 75 ], [ "Pear", 23, 11, 46, 76, 33, 98 ], [ "Apple", 12, 34, 54, 76, 23, 232 ], [ "Banana", 54, 22, 11, 23, 21, 33 ] ],
      ind = ["Apple", "Pear", "Banana"],
      matched = arr.filter(a => ind.includes(a[0])),
      result = Object.values(matched.reduce((r,[fruit, ...rest]) => {
        r[fruit] = r[fruit] || [fruit,[],[],[],[],[],[]];
        rest.forEach((v,i) => r[fruit][i+1].push(v));
        return r;
      },[]));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读