在JSON对象的顶部添加内容

时间:2012-05-27 11:58:33

标签: javascript jquery json

我有一个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;

有什么想法吗?

6 个答案:

答案 0 :(得分:14)

在JS中,不保证对象属性的顺序。因此,即使它们在JSON字符串中排序,当解析为JS对象时,您也永远无法预测它们出现的顺序。

更好地使用数组。您可以使用unshift()方法将项​​目放在第一个索引中。

var data = [bar,bar2,bar3];

data.unshift(newItem);

//data = [newItem,bar,bar2,bar3];

答案 1 :(得分:8)

作为对Joseph the Dreameranswer的称赞,我在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