Destructuring objects from an array using map?

后端 未结 3 709
滥情空心
滥情空心 2021-01-14 00:31

I have wrote this simple code that destructures an array of objects to build new arrays from each key. I am learning ES6 and would like to refactor it into one line of code

相关标签:
3条回答
  • 2021-01-14 00:45

    So you should start with reduce first and return an object. Then you can use destructuring on that. Here's an example:

    const candles = [{
      open: 1,
      high: 2,
      low: 0.5,
      close: 1.5,
      volume: 200
    }, {
      open: 2,
      high: 3,
      low: 0.6,
      close: 1.4,
      volume: 300
    }];
    
    const reduction = candles.reduce((acc, candle) => {
      for (let key in candle) {
        if (!(key in acc)) {
          acc[key] = [];
        }
    
        acc[key].push(candle[key]);
      }
    
      return acc;
    }, {});
    
    console.log(reduction);
    // { open: [ 1, 2 ],
    //   high: [ 2, 3 ],
    //   low: [ 0.5, 0.6 ],
    //   close: [ 1.5, 1.4 ],
    //   volume: [ 200, 300 ] }
    
    const {open, high, low, close, volume} = reduction;
    
    console.log(open, high, low, close, volume);
    // [ 1, 2 ] [ 2, 3 ] [ 0.5, 0.6 ] [ 1.5, 1.4 ] [ 200, 300 ]
    
    0 讨论(0)
  • 2021-01-14 00:54
    let candles = [ {
      open: 1,
      high: 2,
      low: 0.5,
      close: 1.5,
      volume: 200
    } ]
    
    const { open, high, low, close, volume } = candles.reduce( ( accumulator, item ) => {
        Object.keys( item ).forEach( key => {
            accumulator[ key ] = ( accumulator[ key ] || [] ).concat( item[ key ] ) 
        } )
        return accumulator
    }, {} )
    
    0 讨论(0)
  • 2021-01-14 01:03

    Here's a solution using Array.prototype.reduce():

    const candles = [{open: 1, close: 2, low: 3, high: 4, volume: 5}, {open: 6, close: 7, low: 8, high: 9, volume: 10}];
    
    const result = candles.reduce((a, v) => {
      Object.keys(v).forEach(k => (a[k] = a[k] || []).push(v[k]));
      return a;
    }, {});
    
    console.log(result);

    0 讨论(0)
提交回复
热议问题