0

次の形式の JavaScript オブジェクトがあります。

var order = {
  "id": 13,
  "name": "Sebastian",
  "items": [
    {
      "id": 5
    }
  ]
  ...
}

これを次のような形式で取得する必要があります。

order[id] = 13
order[name] = "Sebastian"
order[items][0][id] = 5

Javascriptでこれを行う最良の方法は何ですか? このために事前に構築された関数はありますか?

私はアンダースコアとjqueryを使用してnodeJSを使用しています。

4

1 に答える 1

0

おそらく既製の関数がありますが、この (すぐに作成された) 関数も動作するはずです。

function convert(key, obj) {
  var collector = {};

  function recurse(key, obj) {
    var property, name;
    if( typeof obj === "object" ) {
      for( property in obj ) {
        if( obj.hasOwnProperty(property) ) {
          name = key + "[" + property + "]";
          recurse(name, obj[property]);
        }
      }
    } else {
      collector[key] = String(obj);
    }
  }

  recurse(key, obj);
  return collector;
}

開始キーとオブジェクトを指定すると、完全な名前と値を持つ「フラットな」オブジェクトが返されます。

var order = {
  "id": 13,
  "name": "Sebastian",
  "items": [
    {
      "id": 5
    }
  ]
};

var flattened = convert("order", order);

// `flattened` is now:
// {
//   'order[id]': 13,
//   'order[name]': 'Sebastian',
//   'order[items][0][id]': 5
// }
于 2012-06-15T14:58:50.157 に答える