将对象拆分为两个属性

时间:2017-07-11 13:07:56

标签: javascript underscore.js

下面的一个非常初学的问题我很确定,道歉但是我对此事进行了很好的追捕而没有运气......我正在寻找'打破'或'扩大'以下内容:

var words = { hello: 2, there: 3, heres: 1, text: 1 }

进入这个:

var words = [{
  word: 'hello',
  count: 2
}, {
  word: 'there',
  count: 3
}, {
  word: 'heres',
  count: 1
}, {
  word: 'text',
  count: 1
}]

我和Underscore.js一直在搞乱,但必须遗漏一些非常明显的东西。非常感谢任何帮助,谢谢!

4 个答案:

答案 0 :(得分:7)

您可以使用Object.keys()map()执行此操作。

var words = { hello: 2, there: 3, heres: 1, text: 1 }
var result = Object.keys(words).map(e => ({word: e, count: words[e]}))
console.log(result)

您也可以先创建数组,然后使用for...in循环来推送对象。

var words = { hello: 2, there: 3, heres: 1, text: 1 }, result = [];
for(var i in words) result.push({word: i, count: words[i]})
console.log(result)

答案 1 :(得分:3)

使用Array#map的可能解决方案。



const words = { hello: 2, there: 3, heres: 1, text: 1 },
      res = Object.keys(words).map(v => ({ word: v, count: words[v] }));
      
      console.log(res);




Array#reduce



const words = { hello: 2, there: 3, heres: 1, text: 1 },
      res = Object.keys(words).reduce((s,a) => (s.push({ word: a, count: words[a] }), s), []);
          
      console.log(res);




答案 2 :(得分:2)

以下是使用下划线map功能的解决方案:

words = _.map(words, (v, k) => ({word: k, count: v}));

下划线的地图可以迭代一个物体。 iteratee的第一个参数是值,第二个参数是键。

答案 3 :(得分:0)

let object = {
  "06.10 15:00": 3.035,
  "06.10 21:00": 3.001,
};

let arr = [];

for (const [key, value] of Object.entries(object)) {
  arr.push({ date: key, value: value });
}

console.log(arr);