如何按特定顺序对数组中的项目进行排序

时间:2019-06-16 15:40:19

标签: javascript arrays sorting

考虑一个数组:['wifi', 'food', 'water', 'shelter', 'jazz']

一个如何对数组进行“排序”,以便比其他(预定)值更重要的值首先出现在数组中?

想象一下重量: 'wifi': 1 'food': 3 'shelter': 2 'water': 4 'jazz': 999

如果没有权重的值(例如果汁)进入数组,它将被推到末尾。

因此,新数组将为['jazz', 'water', 'food', 'shelter', 'wifi', 'juice']

3 个答案:

答案 0 :(得分:1)

只需使用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);

答案 1 :(得分:1)

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按字母顺序对权重相等(或没有权重)的元素进行排序。

答案 2 :(得分:0)

您还可以通过确保两个值在对象中具有对应的值然后进行比较来解决此问题。如果不是,则只为其中一个返回-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)