在JSON对象的开头添加新属性

khbbv19g  于 2023-05-02  发布在  其他
关注(0)|答案(8)|浏览(165)

我有这个JSON:

var myVar = {
     "9":"Automotive & Industrial",
     "1":"Books",
     "7":"Clothing"
};

我想在开始时添加一个新元素,我想最终得到这个:

var myVar = {
     "5":"Electronics",
     "9":"Automotive & Industrial",
     "1":"Books",
     "7":"Clothing"
};

我试过这个,但它不工作:

myVar.unshift({"5":"Electronics"});

谢谢!

wmomyfyw

wmomyfyw1#

JavaScript对象没有定义与它们相关联的顺序,所以这是不可能的

如果你需要一个顺序,你应该使用一个对象数组

var myArray = [
    {number: '9', value:'Automotive & Industrial'},
    {number: '1', value:'Books'},
    {number: '7', value:'Clothing'}
]

然后如果你想在第一个位置插入一些东西,你可以使用数组的unshift方法。

myArray.unshift({number:'5', value:'Electronics'})

//myArray is now the following
[{number:'5', value:'Electronics'},
 {number: '9', value:'Automotive & Industrial'},
 {number: '1', value:'Books'},
 {number: '7', value:'Clothing'}]

更多详情:Does JavaScript Guarantee Object Property Order?

k10s72fa

k10s72fa2#

没有办法向JSON添加新条目并控制它们的位置。
如果你想处理有序(奇怪,因为对象是无序的),你基本上必须创建一个新对象并附加数据。

hm2xizp9

hm2xizp93#

JavaScript对象属性不是确定性排序的。无论属性的顺序如何,都可以访问它们。如果你依赖于它们在for-in循环中的特定顺序,我建议你重新考虑你的策略。不同的浏览器将采用不同的方法对属性进行排序。虽然许多浏览器实际上会按照您创建它们的顺序来处理它们,但这种行为实际上并没有在语言规范中定义,因此您不能依赖它。

cygmwpex

cygmwpex4#

这可以使用lodash merge函数来完成,如下所示:

var myObj = _.merge({ col1: 'col 1', col2: 'col 2'}, { col3: 'col 3', col4: 'col 4' });

您的最终对象将看起来像这样:

{ col1: 'col 1', col2: 'col 2', col3: 'col 3', col4: 'col 4' }

正如其他人提到的,不能保证对象中键的顺序保持不变,这取决于您对它的操作。但是,如果你执行合并作为你的最后一步,你应该没问题。注意,'merge'函数将产生一个全新的对象,它不会改变你传入的任何一个对象。

zbsbpyhn

zbsbpyhn5#

我认为不移位的问题可能来自于你是一个关联数组的事实.Definition of associative array
这可能是一个黑客,但如果你必须在JSON对象的开始有这个值,怎么样:

var myNewVar={'5':'Electronics'};
for (xx in myVar) {
    myNewVar[xx]=myVar[xx];
}
6mzjoqzu

6mzjoqzu6#

就这样做吧:

var myVar = {
     "9":"Automotive & Industrial",
     "1":"Books",
     "7":"Clothing"
};

// if you want to add a property, then...

myVar["5"]="Electronics"; // note that it won't be "first" or "last", it's just "5"
tvokkenx

tvokkenx7#

试试这样的:

myObject.sort(function(a,b) { return parseFloat(a.price) - parseFloat(b.price) } );

myObject.sort(function(a,b) { return parseFloat(a.get("price")) - parseFloat(b.get("price")) } );
kmynzznz

kmynzznz8#

字符串化和修改

var foo = {a:1,b:2,c:3};
var bar = JSON.stringify(foo);
foo = JSON.parse('{"d":4,' + bar.slice(1));
alert(JSON.stringify(foo));

相关问题