Javascript 向JSON对象的顶部添加内容

Javascript 向JSON对象的顶部添加内容,javascript,jquery,json,Javascript,Jquery,Json,我有一个JSON对象,它在加载页面时启动,如下所示: data[foo] = bar; data[foo2] = bar2; data[foo3] = bar3; data[foo] = bar; data[foo2] = bar2; data[foo3] = bar3; data[newItem] = newItem; 是否有一种方法可以在第一个foo元素之前注入元素,以便在对数据中的var i执行时,新元素将在对象启动时添加的元素之前循环 原因是,我正在向用户显示一些项目。当用户通过ja

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

data[foo] = bar;
data[foo2] = bar2;
data[foo3] = bar3;
data[foo] = bar;
data[foo2] = bar2;
data[foo3] = bar3;
data[newItem] = newItem;
是否有一种方法可以在第一个
foo
元素之前注入元素,以便在对数据中的var i执行
时,新元素将在对象启动时添加的元素之前循环

原因是,我正在向用户显示一些项目。当用户通过javascript添加一个新项目时,我希望这个新项目显示在所有现有项目之上,但是当我添加新项目时,即

data[newItem] = newItem;
然后JSON对象如下所示:

data[foo] = bar;
data[foo2] = bar2;
data[foo3] = bar3;
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];

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

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

在阵列中,哪一个位于第一位:

window.object还是window.alert

两者都不是,对象没有顺序。如果需要数组,请使用数组。对象不是数组

如果你愿意

var ThingsInOrder = [
  FirstThing,
  SecondThing,
  ThirdThing
];
ThingsInOrder.push(ForthThing);
使用数组

如果您想要:

var ThingsNeverInOrder = {
  Window,
  Alert,
  Derp,
  Herp
};

ThingsNeverInOrder.foo = bar;
使用对象。

作为对的一种恭维,我在firefox和chrome中进行了一些快速检查

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
铬:

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

我偶然发现了这一点,并通过以下方式实现:

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

可能是相关的。也就是说,如果顺序是相关的,使用数组。请参见,而不是选项,我已经将其编码为对象。我必须在无数个地方更改它才能使用数组。有什么方法可以让它作为一个对象工作?所以没有办法使用
data[“foo”]
来获取相应的数据。我想知道是否有库在JavaScription中模拟Python的OrderedDict。此外,使用数组,我也会遇到同样的问题。假设一个数组用5个元素初始化,然后用户添加一个新的元素,我想把它移到数组的开头。我该怎么做?@单击“向上投票”,您可以使用类似数组的对象<代码>var arr=[];arr.foo='bar'唯一的问题是您将无法访问
foo
中的
for(var i=0;i
。因此,您现有的代码可以是相同的。即使您更改了
数据=[]
,您仍然可以在
for(var key in data){…}
循环中访问它们。请远离键盘。请研究一下为什么不应该使用eval。然后找出为什么你不应该把对象转换成字符串然后再转换回来…我很乐意向你学习,为什么我不应该这样做?!您可以使用
JSON.parse来代替
eval