我有一个对象数组,我想更改列顺序并为每个对象添加一个静态值 从这里:
var homes = [
{
"h_id": "3",
"city": "Dallas",
"state": "TX",
"zip": "75201",
"price": "162500"
}, {
"h_id": "4",
"city": "Bevery Hills",
"state": "CA",
"zip": "90210",
"price": "319250"
},...
];
对此:
var homes = [
{
"h_id": "3",
"price": "162500",
"zip": "75201",
"city": "Dallas",
"state": "TX",
"staticValue": "1234"
}, {
"h_id": "4",
"price": "319250",
"zip": "90210",
"city": "Bevery Hills",
"state": "CA",
"staticValue": "1234"
},...
];
我已经尝试过了:
let data = homes.map(function(x) {
return {h_id:x.h_id,
price : x.price,
zip : x.zip,
city : x.city,
state : x.state,
staticValue : "1234"}
});
但是列顺序仍然是
h_id,city,state,zip,price,staticValue
代替:
h_id,price,zip,city,state,staticValue
我在做什么错了?
修改
实际上,我正在使用此Reorder将对象作为DataTable发送到C#控制器。当到达控制器时,可以按照我的要求订购。所以显然我使用的map函数工作正常。
这是一个工作示例: jsfiddle.net/a6o8jbh9/1
答案 0 :(得分:3)
您不能这样做
对象是名称/值对的无序集合
如果您真的想遵守顺序,那就去数组而不是对象。
对象属性的顺序在ECMAScript中也是非标准的。
我不知道重新排序对象的原因是什么?您可以仅通过属性名称访问它们。那么,您从重新订购中获得的好处是什么?
自ES2015
起,有一些方法基于定义属性顺序的特定规则,除了一种特殊情况外,顺序是按时间顺序排列的。对象中属性的顺序取决于所包含属性的类型及其值。这样我们就可以保证订单
我们可以使用map
函数
var homes = [
{
"1abc": "162500",
"h_id": "3",
"city": "Dallas",
"state": "TX",
"zip": "75201"
}, {
"h_id": "4",
"city": "Bevery Hills",
"state": "CA",
"zip": "90210",
"1abc": "319250"
}
];
let data = homes.map(function(x) {
return {h_id:x.h_id,
'1abc':x["1abc"],
zip : x.zip,
city : x.city,
state : x.state,
staticValue : "1234"}
});
console.log(homes)
console.log(data)
输出将类似于
在输出中,顺序已更改。基于ES2015
的属性顺序是基于特定规则的,因此我们无法保证重新排序在所有情况下均能完美执行,在某些情况下(如果我们的输入与定义的规则匹配)可能会有效。
注意:根据您的评论,我相信您需要将此对象发送到控制器操作,然后从那里调用合并查询。如果是这种情况,我认为Json
对象的顺序无关紧要。您的c# model binder
可以将其与controller object.
绑定在一起。如果您的控制器编写正确并且以正确的参数顺序调用了SP
,那么您就不必担心。如果您的控制器逻辑错误,那么我们将无法通过更改Json属性顺序来解决此问题。
答案 1 :(得分:1)
您需要访问正确的属性并正确重新排序-ES6为此提供了有用的功能:
activity?.window?.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)