如何在JavaScript中将嵌套对象转换为对象数组

4

我有一个数据,其结构如下:

var data = {
    0: {
        user: 1,
        job: "call center"
    },
    1: {
        user: 2,
        job: "programmer"
    }
}

现在我想将它们转换为一个对象数组,看起来像这样:

[Object {user : 1, job  : call center}, {user : 2, job  : programmer} ]

这可能吗?我该如何转换它们。有任何帮助,谢谢。


可以吗?是的。 - vol7ron
我需要做什么? - qazzu
3个回答

5

尝试使用map函数

 var array = $.map(data , function(value, index) {
     return [value];
 });

你也可以不使用jQuery来实现:

var array = Object.keys(data).map(function(k) { return obj[k] });

4
了解 - 此问题没有jQuery标签。 - Rahul Desai
或者等等,你正在滥用jQuery的concat-map功能(这个被错误地命名为“map”),它可以枚举对象...聪明。 - Bergi
@RahulDesai 现在怎么样了? - Lucas Rodriguez
你实际上不需要在 value 周围加上 [],事实上你只需要执行 $.map(data, Object) - user1106925
需要注意的是,Object.keys.map 将按照键的出现顺序创建一个数组,但对象的索引/键不一定是数组中的索引。因此,如果一个对象有两个键(例如 03),使用 for 循环将导致数组中对应位置有 2 个值和一堆 undefined(即 [{},undef,undef,{}])。而 map 只会将值取出并放入一个数组集合中([{},{}])。需要更多关于数据源和目标的澄清。 - vol7ron
hmm obj[k] 是 data[k] 对吧。 - lortschi

1
  1. 你的对象创建语法有问题
  2. 以下代码展示了如何使用简单的for循环实现,但是假设了很多情况(例如,你的对象键名正确标记)。我通常会使用map,但是认为这可能不太容易/直观理解;因此,使用循环应该足够简单。

var data =  { 0:{
                  user : 1,
                  job  : 'call center'
              },
              1:{
                  user : 2,
                  job  : 'programmer'
              }
            };


var arr  = [],
    keys = Object.keys(data);

for(var i=0,n=keys.length;i<n;i++){
  var key  = keys[i];
  arr[key] = data[key];
}

Crockford建议使用forEach而不是传统的for循环。 - Rahul Desai
6
那就不要理会Crockford。 - Bergi
1
我喜欢Crockford,但我认为这是个人偏好问题,无论哪种方式更容易理解。for..in也可能适用,但很难确定OP的水平。我的默认选择是传统的for,但是foreach也可以使用。map仍然是首选,因为它会在迭代的结果中创建数组。 - vol7ron
尝试添加一个长度属性(m + 1),并通过 Array.prototype.slice.call(object) 运行它。这样做的效果比较好,而且工作量也少了99%。 - Ismael Miguel

0
Object.values(data)

产生

[{user: 1, job: 'call center'}, {user: 2, job: 'programmer'}]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接