今天工作之余与同事聊天,要是实现一个sku描述里的字段组合的问题。并且实现了请吃饭。哈哈。一顿饭,我和另一位同事积极杠杆的。后来实现了出来。

                    let skuList = [
['黑色', '白色','黄色'],
['64G', '128G', '512G'],
]

例如上面的组合成这样。


[
["黑色", "64G"]
["黑色", "128G"]
["黑色", "512G"]
["白色", "64G"]
["白色", "128G"]
["白色", "512G"]
["黄色", "64G"]
["黄色", "128G"]
["黄色", "512G"]
]

代码实现如下

       function eachArr(arr1,arr2){

             return arr1.map(function(item1){

                  return   arr2.map(function(item2){

                   return  item1 instanceof Array ? item1.concat(item2):[item1,item2];

                    })

                     }).reduce( function(accumulator, currentValue){
return accumulator.concat(currentValue) })
} [['黑色', '白色','黄色'], ['64G', '128G', '512G'],].reduce(function(accumulator, currentValue){ return eachArr(accumulator,currentValue) })
返回
[
["黑色", "64G"]
["黑色", "128G"]
["黑色", "512G"]
["白色", "64G"]
["白色", "128G"]
["白色", "512G"]
["黄色", "64G"]
["黄色", "128G"]
["黄色", "512G"]
]

支持多二维数组哦。

例如:
[  ['黑色', '白色','黄色'],  ['64G', '128G', '512G'],['大', '中', '小'],.......].reduce(function(accumulator, currentValue){

  		    return eachArr(accumulator,currentValue)

              })
返回值是 ["黑色", "64G", "大"]
["黑色", "64G", "中"]
["黑色", "64G", "小"]
["黑色", "128G", "大"]
["黑色", "128G", "中"]
["黑色", "128G", "小"]
["黑色", "512G", "大"]
["黑色", "512G", "中"]
["黑色", "512G", "小"]
["白色", "64G", "大"]
["白色", "64G", "中"]
["白色", "64G", "小"]
["白色", "128G", "大"]
["白色", "128G", "中"]
["白色", "128G", "小"]
["白色", "512G", "大"]
["白色", "512G", "中"]
["白色", "512G", "小"]
["黄色", "64G", "大"]
["黄色", "64G", "中"]
["黄色", "64G", "小"]
["黄色", "128G", "大"]
["黄色", "128G", "中"]
["黄色", "128G", "小"]
["黄色", "512G", "大"]
["黄色", "512G", "中"]
["黄色", "512G", "小"]
总体实现思路就是二维数组里的第一个数组与后一个数组组合。然后组合后的数组,再与后一个数组组合。依次累计组合就可以了。美滋滋。吃了一顿蜜汁鸡。
     这是这是简单的实现一种方式,如果要加上其他业务或是功能可以再eachArr里面区改动。
如要帮忙改动的,可以留言哦。

sku二维数组里的数组从头到尾叠加组合的更多相关文章

  1. 洛谷 P1972 [SDOI2009]HH的项链-二维偏序+树状数组+读入挂(离线处理,思维,直接1~n一边插入一边查询),hahahahahahaha~

    P1972 [SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含 ...

  2. 二维偏序+树状数组【P3431】[POI2005]AUT-The Bus

    Description Byte City 的街道形成了一个标准的棋盘网络 – 他们要么是北南走向要么就是西东走向. 北南走向的路口从 1 到 n编号, 西东走向的路从1 到 m编号. 每个路口用两个 ...

  3. $[SHOI2007]$ 园丁的烦恼 二维数点/树状数组

    \(Sol\) 设一个矩阵的左上角为\((x_1,y_1)\),右下角为\((x_2,y_2)\),\(s_{x,y}\)是到\((1,1)\)二维前缀和,那么这个矩阵的答案显然是\(s_{x_2,y ...

  4. poj3067 二维偏序树状数组

    题解是直接对一维升序排列,然后计算有树状数组中比二维小的点即可 但是对二维降序排列为什么不信呢?? /* */ #include<iostream> #include<cstring ...

  5. hdu1081 DP类最大子段和(二维压缩+前缀和数组/树状数组计数)

    题意:给出一个 n * n 的数字矩阵,问最大子矩阵和是多少. 由于和最长子段和问题类似,一开始想到的就是 DP ,一开始我准备用两个循环进行 DP ,对于每一个 (i,j) ,考察(i - 1,j) ...

  6. 【BZOJ】1047: [HAOI2007]理想的正方形(单调队列/~二维rmq+树状数组套树状数组)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1047 树状数组套树状数组真心没用QAQ....首先它不能修改..而不修改的可以用单调队列做掉,而且更 ...

  7. C. Arcade dp二维费用背包 + 滚动数组 玄学

    http://codeforces.com/gym/101257/problem/C 询问从左上角走到右下角,每次只能向右或者向左,捡起三种物品算作一个logo,求最多能得到多少个logo. 设dp[ ...

  8. c++ 依据输入动态声明数组(一维,二维)

    较早的编译器是不同意这样做的,所以一些书籍比方以Tc解说的书本都说数组的下标不能是变量.在vc6.0下亦是如此. 只是在一些较新的编译器如dev c++已经支持了,例如以下代码不会报错 #includ ...

  9. C++二维数组动态内存分配

    对于二维数组和二维指针的内存的分配 这里首选说一下一维指针和一维数组的内存分配情况. 一维: 数组:形如int  a[5];这里定义了一个一维数组a,并且数组的元素个数是5,这里的a是这五个元素的整体 ...

随机推荐

  1. Centos7 安装需要的软件环境

    Mysql 安装 下载安装 下载并安装MySQL官方的 Yum Repository wget -i -c http://dev.mysql.com/get/mysql57-community-rel ...

  2. day14作业

    文件内容如下,标题为:姓名,性别,年纪,薪资 egon male 18 3000 alex male 38 30000 wupeiqi female 28 20000 yuanhao female 2 ...

  3. JavaScript随机生成布尔值

    //方法一 var rand = Boolean(Math.round(Math.random())); conosole.log(rand) // 方法二: var arr = [true,fals ...

  4. iOS 应用签名原理&重签名

    在苹果的日常开发中,真机测试与打包等很多流程都会牵扯到各种证书,CertificateSigningRequest,p12等.但是很多相应的开发者并不理解iOS App应用签名的原理和流程.今天着重讲 ...

  5. vue进入新页面,与原页面滚动到相同高度的解决方案

    可以在vue路由新增scrollBehavior,控制跳转页面高度 import Router from 'vue-router' new Router({ scrollBehavior (to, f ...

  6. F#周报2019年第44期

    新闻 Elmish.WPF教程 介绍Orleans 3.0 GC配置历史 介绍ONNX运行时1.0 介绍微软Q&A(预览) 使用App中心持续布署与监控你的UWP,WPF与Windows Fo ...

  7. spring cloud 2.x版本 Ribbon服务发现教程(内含集成Hystrix熔断机制)

    本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 前言 本文基于前两篇文章eureka-server和eureka-client的实现. 参考 ...

  8. Apache Tomcat 远程代码执行漏洞(CVE-2019-0232)漏洞复现

    Apache Tomcat 远程代码执行漏洞(CVE-2019-0232)漏洞复现  一.     漏洞简介 漏洞编号和级别 CVE编号:CVE-2019-0232,危险级别:高危,CVSS分值:官方 ...

  9. Mysql用户管理及权限分配

    早上到公司,在服务器上Mysql的数据库里新建了个database,然后本地的系统里用原来连接Mysql账号admin连这个数据库.结果报错了,大概是这样子的: Access denied for u ...

  10. C函数库stdio.h概况

    库变量 size_t    这是无符号整数类型,它是 sizeof 关键字的结果. FILE      这是一个适合存储文件流信息的对象类型. fpos_t   这是一个适合存储文件中任何位置的对象类 ...