将新属性附加到对象内的特定位置

时间:2013-01-24 16:03:56

标签: javascript jquery

如果我将附加属性附加到某个对象,它是否必须在最后,或者我可以将它放在指定的位置。

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在被删除后再次置于第三个位置,而不是将其附加到结尾?当然我可以跳过删除部分。但即使没有这个,我也可以打算将alphabeta: "one point five"注入第二个位置。可能吗?谢谢!

jsbin

2 个答案:

答案 0 :(得分:2)

数组元素已订购;对象属性不是。您永远不应该假设对象属性将按特定顺序迭代。

如果订单对您很重要,请创建一个包含一系列属性名称的新order:[]属性,您可以遍历:

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

答案 1 :(得分: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'
  ]
};

而且,我建议您使用sort and a compare functionsplicing来管理索引。