如何将对象转换为有序数组?

时间:2017-08-26 18:12:27

标签: javascript arrays algorithm object lodash

我想将其转换为基于键数组排序的值数组:

{
  tom: 1,
  jim: 2,
  jay: 3
}

Input - > Output示例:

['jim', 'tom', 'jay'] - > [2, 1, 3]

['jay', 'tom', 'jim'] - > [3, 1, 2]

我怎样才能做到这一点?我宁愿一线lodash解决方案。

4 个答案:

答案 0 :(得分:3)

您可以使用lodash' _.at()按照您想要的顺序获取值的数组:



var data  = {
  tom: 1,
  jim: 2,
  jay: 3
};

var result1 = _.at(data, ['jim', 'tom', 'jay']);
var result2 = _.at(data, ['jay', 'tom', 'jim']);

console.log("['jim', 'tom', 'jay'] -> ", JSON.stringify(result1));
console.log("['jay', 'tom', 'jim'] -> ", JSON.stringify(result2));

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:2)

您可以使用Array#map的简单Javascript映射值。

&#13;
&#13;
var data = { tom: 1, jim: 2, jay: 3 },
    order = ['jim', 'tom', 'jay'],
    result = order.map(k => data[k]);

console.log(result);
&#13;
&#13;
&#13;

答案 2 :(得分:0)

&#13;
&#13;
const data = {
  tom: 1,
  jim: 2,
  jay: 3
}

const order = ['jay', 'tom', 'jim'];

const result = order.map((item) => data[item]);

console.log(result);
&#13;
&#13;
&#13;

答案 3 :(得分:0)

function SortByKeyArray(obj, key_arr) {
    return key_arr.map(k => obj[k]);
}

或者

let SortByKeyArray = (obj, keys) => keys.map(k => obj[k]);

对我来说哪个更友好。