Javascript 向JSON对象的顶部添加内容
我有一个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
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
。