将某些内容添加到JSON对象的顶部

我有一个JSON对象,它在页面加载时启动,如下所示:

data[foo] = bar; data[foo2] = bar2; data[foo3] = bar3; 

有没有办法在第一个foo元素之前注入一个元素,这样当for var i in data执行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; 

有任何想法吗?

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

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

 var data = [bar,bar2,bar3]; data.unshift(newItem); //data = [newItem,bar,bar2,bar3]; 

作为对梦想家约瑟夫的回答的赞美,我在firefox和chrome上进行了一些快速检查。

火狐:

 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 

有没有办法在第一个foo元素之前注入一个元素?

这是数组中的第一个:

window.object或window.alert?

对象没有订单。 如果你想要一个数组使用一个数组。 对象不是数组。

如果你想

 var ThingsInOrder = [ FirstThing, SecondThing, ThirdThing ]; ThingsInOrder.push(ForthThing); 

使用数组。

如果你想:

 var ThingsNeverInOrder = { Window, Alert, Derp, Herp }; ThingsNeverInOrder.foo = bar; 

使用对象。

我偶然发现了这个并使用以下方法实现了:

const newObject = Object.assign({first: value}, oldObject)

如上所述,订单不能保证,但对我来说这已经足够了。 🙂

您可以根据需要创建新对象并排列属性顺序,而不是在同一对象中添加新值。 例子:

 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"} 

我认为您可以将其转换为字符串,将数据附加到字符串的开头,然后使用“eval”将字符串重新转换为json