将对象转换为JSON数组?

Myo*_*oji 3 javascript json

我有以下对象被返回.我通过读取json文件并将结果存储在新对象中来计算名称列表.

{
    ted: 501,
    jeff: 40,
    tony: 90
}
Run Code Online (Sandbox Code Playgroud)

以下函数创建一个对象,其名称为属性,计数为其值.

function countNames(json){

    var count = {};

    for (var i = 0, j = json.length; i < j; i++) {

       if (count[json[i].name]) {
          count[json[i].name]++;
       }
       else {
          count[json[i].name] = 1;
       } 
    }  

    return count;
}
Run Code Online (Sandbox Code Playgroud)

我需要创建一个生成这样结果的对象数组.

[
    {
        name: 'ted',
        total: 501
    },
    {
        name: 'jeff',
        total: 40
    }
    {
        name: 'tony',
        total: 90
    }           
]
Run Code Online (Sandbox Code Playgroud)

我不确定实现这一目标的最佳方法和最有效的方法是什么.任何帮助表示赞赏.

Man*_*wal 6

请考虑以下Javascript代码段:

for (var item in obj) {
    result.push({
        name: item,
        total: obj[item]
    });
}
Run Code Online (Sandbox Code Playgroud)

工作演示

输出:

[  
   {  
      "name":"ted",
      "total":501
   },
   {  
      "name":"jeff",
      "total":40
   },
   {  
      "name":"tony",
      "total":90
   }
]
Run Code Online (Sandbox Code Playgroud)


joe*_*ews 5

我不明白你的代码示例如何与问题相关,但这会将第一种格式的数据转换为最后一种格式:

var output = Object.keys(input).map(function(key) {
  return {
    name: key,
    count: input[key]
  }
});
Run Code Online (Sandbox Code Playgroud)

它使用函数式编程风格,通常可以使代码更清晰.

JSBin

  • OP注意事项:请记住[`Object.Keys()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys)是ECMA 5.1,所以<IE9会惹你生气.(虽然我认为`for ... in`有相同的限制)::此外,@ joews:SO现在有代码片段,不需要引用异地JSBin. (3认同)