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

谢谢!

4

8 回答 8

14

根据定义,Javascript 对象没有与它们关联的顺序,因此这是不可能的

如果你需要一个订单,你应该使用一个对象数组:

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

那么如果你想在第一个位置插入一些东西,你可以使用Arrays的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 保证对象属性顺序吗?

于 2012-05-21T19:46:40.800 回答
2

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

如果你想处理顺序[奇怪,因为对象是无序的],你基本上必须创建一个新对象并附加数据。

于 2012-05-21T19:33:44.707 回答
2

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

于 2012-05-21T19:33:52.350 回答
2

我认为 unshift 问题可能来自于你是一个关联数组的事实。 关联数组的定义

这可能是一个 hack,但是如果您必须在 JSON 对象的开头具有该值,那么:

var myNewVar={'5':'Electronics'};
for (xx in myVar) {
    myNewVar[xx]=myVar[xx];
}
于 2012-05-21T20:14:47.917 回答
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' }

正如其他人所提到的,不能保证对象中键的顺序将保持不变,具体取决于您对它的处理。但是,如果您将合并作为最后一步,您应该没问题。请注意,“合并”功能将产生一个全新的对象,它不会改变您传递给它的任何一个对象。

于 2014-09-24T23:22:25.770 回答
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"
于 2012-05-21T19:37:27.963 回答
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")) } );
于 2012-10-11T08:02:18.643 回答
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));
于 2021-04-19T20:25:43.013 回答