将Javascript对象数组转换为Javascript数组

时间:2013-07-19 08:10:47

标签: javascript json

我有一个javascript对象,当我JSON.stringify它时,它看起来像是

[
    {
        "item_id": null,
        "parent_id": "none",
        "depth": 0,
        "left": "1",
        "right": 4
    },
    {
        "item_id": "1",
        "parent_id": null,
        "depth": 1,
        "left": 2,
        "right": 3
    }
]

我想将其转换为多维数组,如下所示

item[0][0] = item_id
item[0][1] = parent_id
item[0][2] = depth
item[0][3] = left
item[0][4] = right

item[1][0] = item_id
item[1][1] = parent_id
item[1][2] = depth
item[1][3] = left
item[1][4] = right

任何帮助将不胜感激:)

编辑:在所有人的帮助下工作了:)感谢大家的帮助。

4 个答案:

答案 0 :(得分:4)

好吧,让我们在stringify之前获取初始对象(数组)。有了这个,我们可以循环每个项目。然后我们可以为每个属性创建一个新数组。像这样:

var myObject = X;//this is your original object
var newArray = [];

for(var i = 0; i < myObject.length; i++){
   var item = myObject[i];
   var subArray = [];
   subArray.push(item["item_id"]);
   subArray.push(item["parent_id"]);
   subArray.push(item["depth"]);
   subArray.push(item["left"]);
   subArray.push(item["right"]);
   newArray.push(subArray);
}

Here is a working example(检查控制台的结果)

注意:由于有关订单可靠性的谣言,我故意避免使用for in循环。当然,如果你信任它,那就是你的电话,但我更喜欢安全地玩。 You can read some other opinions of this matter here


如果要提高性能,可以直接从值创建数组,如下所示:

for (var i = 0; i < myObject.length; i++) {
    var item = myObject[i];
    var subArray = [item["item_id"], item["parent_id"], item["depth"], item["left"], item["right"]];
    newArray.push(subArray);
}

这大约是性能提升两倍here is the proof

答案 1 :(得分:1)

你的“对象”实际上是一个数组。

var item = [];
for (var i=0; i<yourArray.length; i++) {
   var subArray = [];
   var obj = yourArray[i];
   for (var j in obj) {
      subArray.push(j);
   }
   item.push(subArray);
}

答案 2 :(得分:0)

通过迭代每个对象的字段来映射数组元素

var item = yourarray.map(function (o) { 
  var s =[];
  for (var f in o) { 
    s.push(o[f]);
  }
  return s; 
});

答案 3 :(得分:-2)

对于递归,对于数据对象的尺寸不是有限的:

fiddle

 function isArray($obj) {
    return Object.prototype.toString.call($obj) === '[object Array]';
}

function subObject(data) {


    if(isArray(data)){
        return (subArray(data));
    }

    var result = [];
    for (var i in data) {
        var item = data[i];
        if (item === null) { // null type is ojbect ..!
            result.push(item);
        } else if (isArray(item)) {
            result.push(subArray(item));
        } else if (typeof item === 'object') {
            result.push(subObject(item));
        } else {
            result.push(item);
        }
    }
    return result;
}

function subArray(data) {
    var result = [];

    for (var i = 0; i < data.length; i++) {
        var item = data[i]; 
        if (item === null) { // null type is ojbect ..!
            result.push(item);
        } else if (isArray(item)) {
            result.push(subArray(item));
        } else if (typeof item === 'object') {
            result.push(subObject(item));
        } else {
            result.push(item);
        }
    }
    return result;
}

var r = subObject(data);
console.log(r);