数组交叉

    var field = ['color', 'size', 'type', 'type2', 'season'];
    var arr = [
        {name: '颜色', value: ['red', 'green']},
        {name: '尺码', value: ['L', 'M', 'XL']},
        {name: '类型', value: ['男款', '女款', '人妖款']},
        {name: '类型2', value: ['上衣', '裤子', '帽子', '袜子']},
        {name: '季节', value: ['春', '夏', '秋', '冬']},
    ];

    arr = arr.map(({value: v}, i) => v.map(t => Object({[field[i]]: t})));

    var result = arr
        .reduce((a, b) =>
            a.reduce((c, d) =>
                c.concat(b.map(e => Object.assign({}, d, e))), []));

    console.log(result);
 console.time('start');
  var field = ['color', 'size', 'type', 'type2', 'season'];
  var arr = [
    { name: '颜色', value: ['red', 'green'] },
    { name: '尺码', value: ['L', 'M', 'XL'] },
    { name: '类型', value: ['男款', '女款', '人妖款'] },
    { name: '类型2', value: ['上衣', '裤子', '帽子', '袜子'] },
    { name: '季节', value: ['春', '夏', '秋', '冬'] },
  ];

  function overlapping(a, b) {
    if (a.length === 0) {
      return b;
    }
    if (b.length === 0) {
      return a;
    }

    let newArr = [];

    a.forEach(v => {
      b.forEach(w => {
        newArr.push(v + '|' + w)
      })
    })

    return newArr
  }

  const result = arr.reduce((v, w) => overlapping(v, w.value), []).map(v => {
    let _v = v.split('|');
    let obj = {};
    field.map((x, i) => obj[x] = _v[i])
    return obj;
  })
  console.log(result);
  console.timeEnd('start');

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值