4

オブジェクトに追加のプロパティをアタッチする場合、それを最後に配置する必要がありますか、それとも指定された位置に配置できますか。

function reassign(obj){
  delete obj.c;
  obj.c = "new three";

  var t = "<table border=\"1\">";
  for (var i in obj){
    t += "<tr><td>" + obj[i] + "</td></tr>"; 
  }
  t += "</table>";
  return t;
}

var obj = {
  a : "one",
  b : "two",
  c : "three",
  d : "four" 
};

var reassigned = reassign(obj);
document.write(reassigned);

obj.c削除した後、最後に追加するのではなく、どういうわけか新しいものを3番目の位置に戻すことは可能でしょうか?もちろん、削除部分はスキップできます。しかし、それがなくても、たとえばalphabeta: "one point five"2番目の位置に注入することもできます。出来ますか?ありがとう!

jsbin

4

2 に答える 2

3

配列要素は順序付けられています。オブジェクトのプロパティはそうではありません。オブジェクトのプロパティが特定の順序で繰り返されると思い込まないでください。

順序が重要な場合は、プロパティ名の配列を含む新しいorder:[]プロパティを作成し、それを繰り返すことができます。

var obj = {
  a : "one",
  b : "two",
  c : "three",
  d : "four",
  order : ['a','b','c','d']
};
于 2013-01-24T16:09:23.663 に答える
1

オブジェクトは順不同です。配列を作成してオブジェクトをキーと値のペアに分割するか、配列を使用してオブジェクト キーにインデックスを付けることができます。

オプション1

var collection = [
  {key1: value1},
  {key2: value2},
  {key3: value3}
];

オプション 2

var obj = {
  key1: value1,
  key2: value2,
  key3: value3
};

// you can index just the values
var index_to_value = [
  obj['key1'],
  obj['key2'],
  obj['key3']
];

// or you can index by key, if necessary
var index_to_key = [
  'key1', 'key2', 'key3'
];

そしてもちろん、干渉しない場合は、インデックスをオブジェクトに入れることができます:

var obj = {
  key1: value1,
  key2: value2,
  key3: value3,
  _index: [
    'key1', 'key2', 'key3'
  ]
};

また、並べ替えと比較機能を使用するか、スプライシングを使用してインデックスを管理することをお勧めします。

于 2013-01-24T16:12:31.260 に答える