我有一个JSON对象,它在加载页面时启动,如下所示:
data[foo] = bar;
data[foo2] = bar2;
data[foo3] = bar3;
有没有办法在第一个foo
元素之前注入元素,这样在执行for var i in data
时,新元素将在启动对象时添加的元素之前循环通过?
原因是,我正在向用户显示一些项目。当用户通过javascript添加新项目时,我希望这个新项目显示在所有现有项目之上,但是当我添加新项目时,即
data[newItem] = newItem;
然后JSON对象如下所示:
data[foo] = bar;
data[foo2] = bar2;
data[foo3] = bar3;
data[newItem] = newItem;
而不是我想要的,这是:
data[newItem] = newItem;
data[foo] = bar;
data[foo2] = bar2;
data[foo3] = bar3;
有什么想法吗?
答案 0 :(得分:14)
在JS中,不保证对象属性的顺序。因此,即使它们在JSON字符串中排序,当解析为JS对象时,您也永远无法预测它们出现的顺序。
更好地使用数组。您可以使用unshift()
方法将项目放在第一个索引中。
var data = [bar,bar2,bar3];
data.unshift(newItem);
//data = [newItem,bar,bar2,bar3];
答案 1 :(得分:8)
作为对Joseph the Dreamer的answer的称赞,我在firefox&铬。
<强>火狐:强>
var obj = {};
obj.a = 'a';
obj.c = 'c';
obj.b = 'b';
obj['0'] = '0';
for(var i in obj){
console.log(i);
}
//prints:
a
c
b
0
<强>铬:强>
var obj = {};
obj.a = 'a';
obj.c = 'c';
obj.b = 'b';
obj['0'] = '0';
for(var i in obj){
console.log(i);
}
//prints:
0
a
c
b
答案 2 :(得分:4)
我偶然发现了这一点并使用以下方式实现了它:
const newObject = Object.assign({first: value}, oldObject)
如前所述,订单不能保证,但对我来说这已经足够了。 :)
答案 3 :(得分:3)
有没有办法在第一个foo元素之前注入元素?
阵列首先出现:
window.object或window.alert?
两者都没有订单。如果你想要一个数组使用数组。对象不是数组。
如果你想要
var ThingsInOrder = [
FirstThing,
SecondThing,
ThirdThing
];
ThingsInOrder.push(ForthThing);
使用数组。
如果你想:
var ThingsNeverInOrder = {
Window,
Alert,
Derp,
Herp
};
ThingsNeverInOrder.foo = bar;
使用对象。
答案 4 :(得分:0)
您可以根据需要创建新对象并排列属性顺序,而不是在同一对象中添加新值。 例如:
var objj1 = {name:'viru',lastname:'nehra'};
因此,创建一个具有您想要的新属性的新对象:
var obj2 = {age: 21}
和运行:
for(var key in objj1){
obj2[key] = objj1[key]
}
obj2 = {age: 21, name: "viru", lastname: "nehra"}
答案 5 :(得分:-3)
我认为您可以将其转换为字符串,将数据附加到字符串的开头,然后使用“eval”将字符串重新转换为json