简体   繁体   English

lodash分配键值对

[英]lodash assign key value pair

How do transform this 如何改变这一点

[ { '1491926400000': 222 }, { '1491926400000': 489 } ]

to this: 对此:

[ { date: '1491926400000', count: 222 }, { date: '1491926400000', count: 489 } ]

I have tried with 'reduce' and 'transform' using lodash but not going anywhere with it. 我已经尝试过使用lodash进行'reduce'和'transform'但不会随身携带。

var oldArray = [ { '1491926400000': 222 }, { '1491926400000': 489 } ];
var newArray = [];
for(var i = 0; i < oldArray.length; i++){
  var originObject = oldArray[i];
  for(var key in originObject) {
    var value = originObject[key];
    var obj = {date: key, count: value};
    newArray.push(obj);
  }
}

does the transform 转变

Possible solution using Array#map . 使用Array#map可能的解决方案。

 var arr = [{ '1491926400000': 222 }, { '1491926400000': 489 }], res = arr.map(v => Object.assign({}, ...Object.keys(v).map(c => ({ date: c, count: v[c]})))); console.log(res); 

Here's a neat solution using lodash/fp (curried functions / data last): 这是一个使用lodash/fplodash/fp functions / data last)的简洁解决方案:

const mapData = map(
  flowRight(
    zipObject(['date', 'count']),   // { date: '1491926400000', count: 222 }
    flatten,                        // ['1491926400000', 222]
    toPairs                         // [ ['1491926400000', 222] ]
  )
)

Same thing in regular lodash : 常规lodash

const mapData = (data) => map(data, (o) =>
  zipObject(['date', 'count'], flatten(toPairs(o)))
)

Usage for either: 用于:

mapData([ { '1491926400000': 222 }, { '1491926400000': 489 } ])

// [ { date: '1491926400000', count: 222 }, { date: '1491926400000', count: 489 } ]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM