将某些内容添加到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