如果我将附加属性附加到某个对象,它是否必须在最后,或者我可以将它放在指定的位置。
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"
注入第二个位置。可能吗?谢谢!
答案 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 function或splicing来管理索引。