0

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

4 に答える 4

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

これが実際の例です(コンソールで結果を確認してください)

for in:順序の信頼性について常に耳にする噂のため、意図的にループの使用を避けました。もちろん、それを信頼するならそれはあなた次第ですが、私は安全側でプレーすることを好みます。この問題に関するその他の意見は、こちらで読むことができます


パフォーマンスを向上させたい場合は、次のように値から直接配列を作成できます。

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

これは、パフォーマンスに関して約 2 倍高速です。これがその証拠です。

于 2013-07-19T08:16:07.793 に答える
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);
}
于 2013-07-19T08:16:34.030 に答える
0

各オブジェクトのフィールドを反復処理して、配列要素をマップします

var item = yourarray.map(function (o) { 
  var s =[];
  for (var f in o) { 
    s.push(o[f]);
  }
  return s; 
});
于 2013-07-19T08:19:31.450 に答える
-2

再帰を使用すると、データオブジェクトの次元が制限されません。

フィドル

 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);
于 2013-07-19T08:25:13.813 に答える