Как изменить положение столбцов в массиве объектов - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть массив объектов, и я хочу изменить порядок столбцов и добавить статическое значение для каждого из них:

 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 #.и когда прибывает в контроллер, он заказывается так, как я хотел.так что, видимо, использованная мной функция карты работала нормально.

вот рабочий пример: jsfiddle.net / a6o8jbh9 / 1

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Вам необходимо получить доступ к правильным свойствам и правильно изменить порядок - ES6 предоставляет полезные функции для этого:

let data = vm.homes.map({ h_id, city, state, zip, price } => { h_id, price, zip, city, state, staticValue:"1234" });
0 голосов
/ 13 февраля 2019

Вы не можете сделать это

объект является неупорядоченным набором пар имя / значение

Если вы действительно хотите придерживаться порядка, тогда переходите к массиву вместо объектов,

Порядок свойств объектов также нестандартен в ECMAScript.

И я не имею ни малейшего представления о причине переупорядочения объектов? Вы можете просто получить к ним доступ по имени свойства,Так какую выгоду вы ожидаете от переупорядочения?

, поскольку ES2015 существуют методы, основанные на определенных правилах, определяющих порядок свойств, и кроме одного конкретного случая порядок является хронологическим.Порядок свойств в объекте зависит от типа включенных свойств и их значений.Таким образом, мы можем гарантировать порядок

Мы можем взять пример с map function

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)

Выход будет выглядеть как

enter image description here

enter image description here

На выходе порядок изменился.Основываясь на ES2015, порядок свойств основан на определенных правилах, поэтому мы не можем гарантировать, что переупорядочение работает идеально во всех случаях, это может сработать в нескольких случаях (если наши входные данные соответствуют определенным правилам), но не во всех случаях.

Примечание: согласно вашему комментарию, я считаю, что вам нужно отправить этот объект в действие контроллера, и оттуда вы вызовете запрос на слияние.Если это сценарий, я думаю, что порядок объектов Json не имеет значения.Ваш c# model binder имеет возможность связать его с controller object. Если ваш контроллер написан правильно и если он вызывает SP с правильным порядком параметров, то не стоит беспокоиться.Если логика вашего контроллера неверна, мы не сможем решить эту проблему, изменив порядок свойств Json.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...