javascript - 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",
]
我来不及了。我该怎么做?
解决方案
您可以为值采用笛卡尔函数并将键映射到值前面,然后加入数组。
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; }
推荐阅读
- bash - bash 模式替换以删除任意长的字母序列
- java - 使用正则表达式在java中替换字符串
- python-3.x - 破折号四个具有相同输入和不同输出的回调
- javascript - 添加新部分 jQuery 后将 name 属性增加 1
- angular - 与 Vue 的 beforeMount 等效的角度是多少?
- javascript - 如何提高流星网络应用程序的性能
- php - 如何在 2 个日期之间取整?
- react-native - 在 react-native ^60 上手动添加库
- plsql - 在新 QUERY 的 LOOP 中使用游标
- javascript - 无法通过 GAS 更新 github 存储库上的 json