sku二维数组里的数组从头到尾叠加组合
今天工作之余与同事聊天,要是实现一个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二维数组里的数组从头到尾叠加组合的更多相关文章
- 洛谷 P1972 [SDOI2009]HH的项链-二维偏序+树状数组+读入挂(离线处理,思维,直接1~n一边插入一边查询),hahahahahahaha~
		
P1972 [SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含 ...
 - 二维偏序+树状数组【P3431】[POI2005]AUT-The Bus
		
Description Byte City 的街道形成了一个标准的棋盘网络 – 他们要么是北南走向要么就是西东走向. 北南走向的路口从 1 到 n编号, 西东走向的路从1 到 m编号. 每个路口用两个 ...
 - $[SHOI2007]$ 园丁的烦恼 二维数点/树状数组
		
\(Sol\) 设一个矩阵的左上角为\((x_1,y_1)\),右下角为\((x_2,y_2)\),\(s_{x,y}\)是到\((1,1)\)二维前缀和,那么这个矩阵的答案显然是\(s_{x_2,y ...
 - poj3067 二维偏序树状数组
		
题解是直接对一维升序排列,然后计算有树状数组中比二维小的点即可 但是对二维降序排列为什么不信呢?? /* */ #include<iostream> #include<cstring ...
 - hdu1081 DP类最大子段和(二维压缩+前缀和数组/树状数组计数)
		
题意:给出一个 n * n 的数字矩阵,问最大子矩阵和是多少. 由于和最长子段和问题类似,一开始想到的就是 DP ,一开始我准备用两个循环进行 DP ,对于每一个 (i,j) ,考察(i - 1,j) ...
 - 【BZOJ】1047: [HAOI2007]理想的正方形(单调队列/~二维rmq+树状数组套树状数组)
		
http://www.lydsy.com/JudgeOnline/problem.php?id=1047 树状数组套树状数组真心没用QAQ....首先它不能修改..而不修改的可以用单调队列做掉,而且更 ...
 - C. Arcade dp二维费用背包 + 滚动数组  玄学
		
http://codeforces.com/gym/101257/problem/C 询问从左上角走到右下角,每次只能向右或者向左,捡起三种物品算作一个logo,求最多能得到多少个logo. 设dp[ ...
 - c++ 依据输入动态声明数组(一维,二维)
		
较早的编译器是不同意这样做的,所以一些书籍比方以Tc解说的书本都说数组的下标不能是变量.在vc6.0下亦是如此. 只是在一些较新的编译器如dev c++已经支持了,例如以下代码不会报错 #includ ...
 - C++二维数组动态内存分配
		
对于二维数组和二维指针的内存的分配 这里首选说一下一维指针和一维数组的内存分配情况. 一维: 数组:形如int a[5];这里定义了一个一维数组a,并且数组的元素个数是5,这里的a是这五个元素的整体 ...
 
随机推荐
- GC 知识点补充——CMS
			
之前已经讲过了不少有关 GC 的内容,今天准备将之前没有细讲的部分进行补充,首先要提到的就是垃圾收集器. 基础的回收方式有三种:清除.压缩.复制,衍生出来的垃圾收集器有: Serial 收集器 新生代 ...
 - Spring(二)装配Spring Bean
			
控制反转的概念:控制反转是一种通过描述(在Java中或者是XML或者注解)并通过第三方去产生或获取特定对象的方式. 在Spring中实现控制反转的是IoC容器,其实现方法是依赖注入(Dependenc ...
 - Cannot read property 'forEach' of undefined
			
在singer-detail组件中,有一个_normalizeSongs()方法,遍历数组 _normalizeSongs(list) { let ret = []; list.forEach(ite ...
 - MUI 混合开发移动app应用开发 --- app版本升级
			
当我们的app开发完成之后,无可避免的以后会进行产品升级,那么我们希望在客户的手机上让app进行自动升级,可以分为自动升级和手动升级. 自动升级:一般在客户app第一次打开首页的时候. 手动升级:在a ...
 - vue学习笔记(一)入门
			
前言 随着前端不断的壮大,许多公司对于前端开发者的需求也越来越多了,作为一名优秀的前端工程师,如果连vue和react都不会的话,那真是out了,为什么那么说呢?这是我在招聘网站上截的一张图,十家公司 ...
 - spring boot跨域请求访问配置以及spring security中配置失效的原理解析
			
一.同源策略 同源策略[same origin policy]是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源. 同源策略是浏览器安全的基石. 什么是源 源[orig ...
 - MAVEN(一)  安装和环境变量配置
			
一.安装步骤 1.安装maven之前先安装jdk,并配置好环境变量.确保已安装JDK,并 “JAVA_HOME” 变量已加入到 Windows 环境变量. 2.下载maven 进入官方网站下载网址如下 ...
 - 学习笔记28_MVC异步请求
			
*微软的MVC异步请求 使用一下方式,就能生成完整的<from>标签,以及对应的表单元素,提交时能达到异步提交的效果 <%using(Ajax.BeginForm( "Co ...
 - 「刷题」GERALD07加强版
			
是LCT了. 首先我们不知道联通块怎么数. 然后颓标签知道了是LCT. 那么考虑一下怎么LCT搞. 有一个很普遍的思路大家也应该都知道,就是如何求一个区间中某种颜色的个数. 这个可以很简单的用主席树来 ...
 - MinIO 参数解析与限制
			
MinIO 参数解析与限制 MinIO server 在默认情况下会将所有配置信息存到 ${HOME}/.minio/config.json 文件中. 以下部分提供每个字段的详细说明以及如何自定义它们 ...