сортировать JSON путем сортировки ArrayList в Javascript / JQuery - PullRequest
0 голосов
/ 07 мая 2019

У меня есть данные в javascript из ajax, как показано ниже.

data:{site: ["abc", "def", "gfr"], month: ["3", "2", "6"], value: ["10", "21", "1"]}

Я хочу отсортировать данные по месяцам.

результат, который я хочу:

data: {site: ["def", "abc", "gfr"], month: ["2", "3", "6"], value: ["21", "10", "1"]}

Я знаю, что могу сортировать массив как data.month.sort () но сортирует только месячный массив. Как отсортировать все значения по значению одного ключа?

Ответы [ 3 ]

1 голос
/ 07 мая 2019

Стандартный метод состоит в том, чтобы взять индексы массива ключей для сортировки и отсортировать индексы как образец для всех других массивов, взяв индекс и значение из массива ключей.

В конце сопоставьте массив soretd со свойствами.

var data = { site: ["abc", "def", "gfr"], month: ["3", "2", "6"], value: ["10", "21", "1"] },
    array = data.month,
    indices = [...array.keys()].sort((a, b) => array[a] - array[b]);

Object.keys(data).forEach(k => data[k] = indices.map(i => data[k][i]));

console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 07 мая 2019

другой способ сделать это (учитывая, что ключом является site):

const data = {site: ["abc", "def", "gfr"], month: ["3", "2", "6"], value: ["10", "21", "1"]}

const output = data.site
   .map((s,i)=> ({site:s, month: data.month[i], value: data.value[i]}))
   .sort((a, b) => b.value - a.value)
   .reduce((acc,cur) => ({
         site:[...acc.site, cur.site],
         month:[...acc.month, cur.month], 
         value:[...acc.value, cur.value]
      }),
      {site:[],month:[], value:[]});

console.log(output)
0 голосов
/ 07 мая 2019

Вы можете sort month 'keys (индексы), основываясь на их числовом значении. Затем используйте map, чтобы получить индекс данных для каждого массива:

Это сортирует month на основе их числового значения

const data = {site: ["abc", "def", "gfr"], month: ["3", "2", "6"], value: ["10", "21", "1"]}

const { site, month, value } = data;

const keys = [...month.keys()].sort((a,b) => month[a] - month[b])

const output = { 
  site: keys.map(k => site[k]),
  month: keys.map(k => month[k]),
  value: keys.map(k => value[k]),
}

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