我有这个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"});
谢谢!
答案 0 :(得分:10)
根据定义,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'}]
答案 1 :(得分:2)
无法向JSON添加新条目并控制它们的位置。
如果你想处理订单[奇怪,因为对象是无序的],你必须基本上创建一个新对象并附加数据。
答案 2 :(得分:2)
Javascript对象属性未经确定性排序。无论它们处于何种顺序,都可以访问属性。如果您依赖它们来按for-in
循环的特定顺序,我建议您重新考虑您的策略。不同的浏览器将采用不同的方法来排序属性。虽然许多浏览器实际上会按照您创建它们的顺序处理它们,但实际上并未在语言规范中定义该行为,因此您无法依赖它。
答案 3 :(得分:2)
我认为不合时宜的问题可能来自你是一个关联数组。 Definition of associative array
这可能是一个黑客,但如果你必须在JSON对象的开头有这个值,那么:
var myNewVar={'5':'Electronics'};
for (xx in myVar) {
myNewVar[xx]=myVar[xx];
}
答案 4 :(得分: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'函数将生成一个全新的对象,它不会改变你传递给它的任何对象。
答案 5 :(得分:1)
这样做:
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"
答案 6 :(得分: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")) } );
答案 7 :(得分: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));