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

7

我有这个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"});

谢谢!


1
unshift 用于数组,myVar 不是一个数组。 - Musa
2
一个对象是一个无序的键值对列表,因此没有“开始”或“结束”。 - Andreas
3
这不是JSON。JSON是一个字符串。这只是用于对象字面量的普通的JavaScript代码。 - Jonathan M
1
请查阅以下关于JavaScript中对象 vs 数组以及它们不同使用场景的详细信息。https://dev59.com/a3RB5IYBdhLWcg3wNk93 对我来说,你可能只需要一个带有ID字段的嵌套对象。 - dwerner
8个回答

14

按照定义,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'}]

更多细节请查看:JavaScript是否保证对象属性顺序?


2

我认为unshift问题可能来自于你使用了关联数组。 关联数组定义

这可能是一个hack,但如果你必须将该值放在JSON对象的开头,怎么样:

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

2

无法向JSON中添加新条目并控制它们的位置。

如果您想处理顺序[尽管对象是无序的],您将不得不基本上创建一个新对象并附加数据。


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

1
您可以使用对象数组,从而控制顺序并在对象内保留ID。 - eyelidlessness

2
这可以使用 lodash 的合并函数来完成:
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”函数将生成一个全新的对象,它不会改变您传递给它的任何一个对象。


0

尝试类似这样的东西:

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

0

就这样做:

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"

myVar.5="Electronics";会导致语法错误,你需要这样写:myVar.["5"]="Electronics"; - Musa

0

转换为字符串并修改

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));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接