2017-04-11 114 views
1

如何改造这个lodash指定键值对

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

这样:

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

我与“降低”和“变换”使用lodash但与它的任何地方去尝试。

回答

0

可能的解决方法。

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);

+0

结构与OP的期望结构不同。对初学者来说,这也可能有些压倒性,解释会有所帮助。 (另外,你可以使用扩展语法而不是'Object.assign') – Li357

+0

@AndrewLi没有注意到。谢谢,修复。 –

+0

请添加一些关于此代码为何/如何帮助OP的解释。这将有助于提供未来观众可以从中学习的答案。请参阅[这个元问题及其答案](http://meta.stackoverflow.com/q/256359/215552)了解更多信息。 –

0
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); 
    } 
} 

确实变换使用Array#map

+0

nope。它给了我{[date:'0',count:{'1491926400000':222}}, {date:'1',count:{'1491926400000':489}}] – user2994871

+0

是的,我看到失败和编辑它。现在它起作用 – TypedSource

0

下面是使用lodash/fp(咖喱功能/最后的数据)一个巧妙的解决办法:

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

定期lodash同一件事:

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

使用情况要么:

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

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