Как отсортировать элементы в массиве в определенном порядке - PullRequest
0 голосов
/ 16 июня 2019

Рассмотрим массив: ['wifi', 'food', 'water', 'shelter', 'jazz']

Как можно "отсортировать" массив так, чтобы значения, которые важнее , чем другие (предопределенные), были первыми в массиве?

Представьте, что веса были: 'wifi': 1 'food': 3 'shelter': 2 'water': 4 'jazz': 999

Если в массив поступило значение без весов (например, сок), оно будет сдвинуто до конца.

Итак, новый массив будет ['jazz', 'water', 'food', 'shelter', 'wifi', 'juice']

Ответы [ 3 ]

1 голос
/ 16 июня 2019

let arr = ['zzzz', 'wifi', 'food', 'water', 'shelter', 'jazz', 'aaaaa', 'blah'];

let weights = {
  'wifi': 1,
  'food': 3,
  'shelter': 2,
  'water': 4,
  'jazz': 999,
  'blah': 2,
}

arr.sort((a, b) =>
    (weights[b] || 0) - (weights[a] || 0)
    || a.localeCompare(b));



console.log(arr);

weights[a] || 0 возвращает вес элемента или ноль для невзвешенного элемента. || localeCompare сортирует элементы с одинаковыми весами (или без веса) по алфавиту.

1 голос
/ 16 июня 2019

Просто отсортируйте массив по весам, используя sort, и прибегните к нему после добавления элементов.

let arr = ['wifi', 'food', 'water', 'shelter', 'jazz'];
let weights = {
  'wifi': 1,
  'food': 3,
  'shelter': 2,
  'water': 4,
  'jazz': 999
}

function order() {
  arr = arr.sort((a, b) => weights[b] - weights[a]);
}

function push(...elements) {
  arr.push(...elements);
  order();
}
order();


console.log(arr);
push('new');
console.log(arr);
0 голосов
/ 16 июня 2019

Вы также можете решить эту проблему, убедившись, что оба значения имеют соответствующее значение в объекте, а затем сравнить.Если не просто вернуть -1 для одного, который имеет и 0 для другого:

let data = ['wifi', 'food', 'water', 'juice', 'shelter', 'jazz']
let weights = { 'wifi': 1, 'food': 3, 'shelter': 2, 'water': 4, 'jazz': 999 }

let result = data.sort((a,b) => (weights[b] && weights[a]) 
  ? weights[b] - weights[a] 
  : weights[a] ? -1 : 0 )
	
console.log(result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...