基于数组对对象进行排序以生成排序后的数组

时间:2018-07-02 02:29:48

标签: javascript arrays ecmascript-6

对象在显示时不按顺序排列,因此必须将现有对象转换为数组,但要遵循该顺序。

我将此数组定为[1,2,3]

这是我的原始输入aka来源

{'2': 'two',
'3': 'three',
'1':'one'}

我如何制作一个函数来生成一个新数组,其顺序遵循上面的排序键?

我在这个阶段被困住

//expected 
['one', 'two', 'three']
const order = ['1', '2', '3']
const source = {
  '2': 'two',
  '3': 'three',
  '1': 'one'
}

let sorted = Object.keys(source).map(o => {
  //return order.includes(o) ? //what to do here : null
})

我认为我必须在循环内循环。

2 个答案:

答案 0 :(得分:3)

可以简单地映射order数组并从source返回相应的值。除此之外,还有什么使它变得复杂

const order = ['1', '2', '3']
const source = {
  '2': 'two',
  '3': 'three',
  '1': 'one'
}

const sorted = order.map(n=>source[n])

console.log(sorted)

答案 1 :(得分:0)

您可以减少排序数组,并从源对象中找到相关的字符串。此方法仅使用一个循环,因此效率更高。

const order = ['1', '2', '3', '4', '5'];
const source = {
  '2': 'two',
  '5': 'five',
  '3': 'three',
  '1': 'one',
  '4': 'four'
};

let sorted = order.reduce((obj, item) => {
  obj.push(source[item]);
  return obj;
}, []);

console.log(sorted);