Javascript 如何更改列在对象数组中的位置

Javascript 如何更改列在对象数组中的位置,javascript,arrays,angularjs,object,ecmascript-6,Javascript,Arrays,Angularjs,Object,Ecmascript 6,我有一个对象数组,我想更改列的顺序,并为每个列添加一个静态值 由此: var homes = [ { "h_id": "3", "city": "Dallas", "state": "TX", "zip": "75201", "price": "162500" }, { "h_id": "4",

我有一个对象数组,我想更改列的顺序,并为每个列添加一个静态值 由此:

 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
我做错了什么

编辑

实际上,我使用这个重新排序将对象作为数据表发送到C#controller。当到达控制器时,它是按我的要求订购的。显然,我使用的映射函数工作得很好

下面是一个工作示例: 你不能那样做

对象是一组无序的名称/值对

如果你真的想坚持顺序,那么就选择数组而不是对象

对象属性的排序在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
能够将其与
控制器对象绑定。
如果您的控制器编写正确,并且使用正确的参数顺序调用
SP
,则无需担心。如果控制器逻辑错误,那么我们无法通过更改Json属性顺序来解决此问题

您需要访问正确的属性并正确重新排序-ES6提供了有用的功能:

let data = vm.homes.map({ h_id, city, state, zip, price } => { h_id, price, zip, city, state, staticValue:"1234" });

原因是将此对象作为表发送到我无法编辑的C#控制器。控制器将表发送到SQL Server中的合并存储过程,该过程需要精确的列顺序。感谢您的回答和信息,但在我的示例中,是map函数worked@DorLugasi你能为你的工作示例提供一个JSFIDLE吗?结果不是用Javascript显示的,而是用c#控制器显示的。使用map函数更改顺序时,顺序在DataTable@DorLugasi但是你写的代码或者你接受的答案是用js写的,对吗?我想买一把同样的小提琴。你能给我一把小提琴吗same@DorLugasi这就是解决问题的方法,因为阿伦帕桑特夫的回答中概述了一些想法,所以有时可能不起作用。您可能需要JSON方法。请在示例中提供JSFIDLE。因为当我尝试它时,它不起作用