代码之家  ›  专栏  ›  技术社区  ›  Hsueh-Jen

我想用Lodash(而不是concat)组合两个Javascript数组

  •  0
  • Hsueh-Jen  · 技术社区  · 6 年前

    我有两个像下面这样的数组

      const registers = [{ user: 'Allen', type: 'phone' }, { user: 'Eric', type: 'email' }];
      const dates = ['20171225', '20180914'];
    

    我要他们像这样来

    const result = [
      { user: 'Allen', type: 'phone', date: '20171225' }
      { user: 'Allen', type: 'phone', date: '20180914' }
      { user: 'Eric', type: 'email', date: '20171225' }
      { user: 'Eric', type: 'email', date: '20180914' }
    ];
    

    我认为有一个适当的功能 Lodash 在这种情况下, 但我自己找不到。

    4 回复  |  直到 6 年前
        1
  •  3
  •   Orelsanpls    6 年前

    const registers = [{
      user: 'Allen',
      type: 'phone',
    }, {
      user: 'Eric',
      type: 'email',
    }];
    
    const dates = [
      '20171225',
      '20180914',
    ];
    
    const arr = registers.reduce((tmp, x) => [
      ...tmp,
    
      ...dates.map(y => ({
        ...x,
    
        date: y,
      })),
    ], []);
    
    console.log(arr);
        2
  •  1
  •   Chris Li    6 年前

    一种方法是使用reduce+forEach,但是任何双循环都应该可以工作。

    const registers = [{ user: 'Allen', type: 'phone' }, { user: 'Eric', type: 'email' }];
    const dates = ['20171225', '20180914'];
    let answer = registers.reduce((acc, n) => {
      dates.forEach(x => {
        acc.push({user: n.user, type: n.type, date: x});
      });
      return acc;
     }, [])
     console.log(answer);
        3
  •  0
  •   FK82    6 年前

    在这种情况下,使用 洛达斯 不会产生太多代码缩减(您可以简单地替换对 _.map(a, ...) 具有 a.map(...) ). 但好吧,这里是:

    const registers = [{ user: 'Allen', type: 'phone' }, { user: 'Eric', type: 'email' }];
    const dates = ['20171225', '20180914'];
      
    const result = _.map(registers, ({ user, type }) => _.map(dates, (date) => ({ user, type, date })));
    
    console.log(result);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.core.js"></script>
        4
  •  -1
  •   Farooq Ahmed Khan    6 年前

    正如OP所说的使用lodash,这里有一个解决方案

    洛达斯变体

    var registers = [{ user: 'Allen', type: 'phone' }, { user: 'Eric', type: 'email' }];
    var dates = ['20171225', '20180914'];
    
    let result = _.map(registers, function(value, index, _source){
      return _.extend(value, { date: (dates[index] || null)});
    });
    
    console.log(result);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.core.min.js"></script>

    香草JS变种

    var registers = [{ user: 'Allen', type: 'phone' }, { user: 'Eric', type: 'email' }];
    var dates = ['20171225', '20180914'];
    
    let result = registers.map(function(value, index, _source){
      return Object.assign(value, { date: (dates[index] || null)});
    });
    
    console.log(result);

    更新的答案

    var registers = [{ user: 'Allen', type: 'phone' }, { user: 'Eric', type: 'email' }];
    var dates = ['20171225', '20180914'];
    
    const result = _.flatten(_.map(registers, function(value, index, _source){
      return _.map(dates, (v, i, _s) => _.extend(value, { date: v})); 
    }));
    
    console.log(result);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.core.js"></script>