在JSON对象的顶部添加内容

Cli*_*ote 8 javascript jquery json

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

data[foo] = bar;
data[foo2] = bar2;
data[foo3] = bar3;
Run Code Online (Sandbox Code Playgroud)

有没有办法在第一个元素之前注入foo元素,这样在执行a时for var i in data,新元素将在启动对象时添加的元素之前循环?

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

data[newItem] = newItem;
Run Code Online (Sandbox Code Playgroud)

然后JSON对象如下所示:

data[foo] = bar;
data[foo2] = bar2;
data[foo3] = bar3;
data[newItem] = newItem;
Run Code Online (Sandbox Code Playgroud)

而不是我想要的,这是:

data[newItem] = newItem;
data[foo] = bar;
data[foo2] = bar2;
data[foo3] = bar3;
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Jos*_*eph 15

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

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

var data = [bar,bar2,bar3];

data.unshift(newItem);

//data = [newItem,bar,bar2,bar3];
Run Code Online (Sandbox Code Playgroud)


小智 8

作为对梦想家约瑟夫回答的赞美,我在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
Run Code Online (Sandbox Code Playgroud)

铬:

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
Run Code Online (Sandbox Code Playgroud)


小智 5

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

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

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