首页 > 解决方案 > Javascript 将数组项与其他数组中的每个项组合为文本

问题描述

我有这个数组;["Color", ["red", "blue"]]

我想将颜色数组的项目与这些数组项目中的项目组合为文本;

[
 ["Size", ["small", "medium", "large"]],
 ["Model", ["modern", "old"]]
]

最终结果应该是这样的;

[
 "Color_red_Size_small_Model_modern",
 "Color_red_Size_small_Model_old",
 "Color_red_Size_medium_Model_modern",
 "Color_red_Size_medium_Model_old",
 "Color_red_Size_large_Model_modern",
 "Color_red_Size_large_Model_old",
 "Color_blue_Size_small_Model_modern",
 "Color_blue_Size_small_Model_old",
 "Color_blue_Size_medium_Model_modern",
 "Color_blue_Size_medium_Model_old",
 "Color_blue_Size_large_Model_modern",
 "Color_blue_Size_large_Model_old",
]

我来不及了。我该怎么做?

标签: javascriptarrays

解决方案


您可以为值采用笛卡尔函数并将键映射到值前面,然后加入数组。

const
    cartesian = (a, b) => a.reduce((r, v) => r.concat(b.map(w => [].concat(v, w))), []),
    data = [["Color", ["red", "blue"]], ["Size", ["small", "medium", "large"]], ["Model", ["modern", "old"]]],
    keys = data.map(([key]) => key),
    result = data
        .map(([, values]) => values)
        .reduce(cartesian)
        .map(a => a.map((v, i) => [keys[i], v].join('_')).join('_'));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读