我有一个数组;["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",
]我去不了了。我该怎么做?
发布于 2018-11-10 16:57:18
试一试
function makeLabels (arr) {
return arr.reduce((result, el) => {
var first = el[0];
var list = el[1];
var newResult = [];
if (result.length < 1) {
list.forEach((val) => {
newResult.push(first+"_"+val);
});
} else {
result.forEach((r) => {
list.forEach((val) => {
newResult.push(r+"_"+first+"_"+val);
});
});
}
return newResult;
}, []);
}
var properties =
[ ["Color", ["red", "blue"]]
, ["Size", ["small", "medium", "large"]]
, ["Model", ["modern", "old"]] ];
console.log( makeLabels(properties) );
发布于 2018-11-10 17:06:57
您可以为值取一个笛卡儿函数,并将键映射到值的前面,然后加入数组。
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; }
https://stackoverflow.com/questions/53241078
复制相似问题