首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Javascript将数组项与其他数组中的每个项合并为文本

Javascript将数组项与其他数组中的每个项合并为文本
EN

Stack Overflow用户
提问于 2018-11-10 16:38:55
回答 2查看 46关注 0票数 1

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

我希望将颜色数组中的项与这些数组项中的项作为文本组合;

代码语言:javascript
运行
复制
[
 ["Size", ["small", "medium", "large"]],
 ["Model", ["modern", "old"]]
]

最终的结果应该是这样的;

代码语言:javascript
运行
复制
[
 "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",
]

我去不了了。我该怎么做?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-10 16:57:18

试一试

代码语言:javascript
运行
复制
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) );

票数 0
EN

Stack Overflow用户

发布于 2018-11-10 17:06:57

您可以为值取一个笛卡儿函数,并将键映射到值的前面,然后加入数组。

代码语言:javascript
运行
复制
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);
代码语言:javascript
运行
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53241078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档