Есть ли возможность изменить массив объектов Key order? - PullRequest
0 голосов
/ 11 мая 2019

Все, это моя структура массива

let data = [
    {"name": "ragupathi", "siteID": 10},
    {"name": "abi","siteID": 13},
    {"name": "mahesh", "siteID": 12},
]

Я хочу групповые данные на основе siteID, поэтому я использую groupBy siteID

{
  "10": [
    {
      "name": "ragupathi",
      "siteID": 10
    }

  ],
  "12": [
    {
      "name": "mahesh",
      "siteID": 12
    }
  ],
  "13": [
    {
      "name": "abi",
      "siteID": 13
    }
  ]
}

Но я ожидаю имя вывода в порядке ASC

{
  "13": [
    {
      "name": "abi",
      "siteID": 13
    }
  ],
  "10": [
    {
      "name": "mahesh",
      "siteID": 12
    }
  ],
  "12": [
   {
      "name": "ragupathi",
      "siteID": 10
    }
   ],
}

GroupBy SiteID Сгруппированный вывод на основе свойств имени объекта

Я не могу изменить порядок, в котором объект на основе имени свойства объекта приводит какой-то пример или ссылочный код, к которому я новичокJavascript

Ответы [ 2 ]

0 голосов
/ 11 мая 2019

Я не на 100% уверен, почему массив не работает для вас.

Возможно, вы хотите, чтобы 1 структура была отсортирована, а также получить доступ к объекту с помощью ключа.

Возможно, выобнаружите, что просто использовать Array.find() было бы довольно быстро.

Но другой вариант, если вы не возражаете против того, чтобы ваши ключи имели префикс, например.как _123, тогда это заставит ключ быть строкой, поэтому, используя современные движки JS, порядок основан на порядке вставки.Так что, если вы сделали sort, а затем reduce, вы должны получить ключи объектов в нужном вам порядке, но, конечно, с простым префиксом.

Конечно, если позже вы захотите получить доступ кобъект, вы просто должны помнить, чтобы ввести префикс.

const data = [
    {"name": "ragupathi", "siteID": 10},
    {"name": "abi","siteID": 13},
    {"name": "mahesh", "siteID": 12},
];


const ret =
  data.sort((a, b) => a.name.localeCompare(b.name)).
  reduce((a, v) => {
    a[`_${v.siteID}`] = v;
  return a;
}, {}); 

console.log(ret);

//test let's get id 13 by key
console.log(ret['_13']);

//prove order
console.log(Object.keys(ret));
0 голосов
/ 11 мая 2019

Зачем вам нужен объект с sideID в качестве ключа?Вы можете просто отсортировать массив следующим образом

let data = [
    {"name": "ragupathi", "siteID": 10},
    {"name": "abi","siteID": 13},
    {"name": "mahesh", "siteID": 12},
]

data.sort((a,b) => {    
  if(a.siteID > b.siteID) {
    return -1;
  }
  if(a.siteID < b.siteID) {
    return 1;
  }
  return 0;
})
...