我有一个包含数据对象的数组:
[{height: '5 feet'}, {name: 'john'}, {'hair-color': 'brown'}]
另一个按照这些对象应该遵循的顺序:
['name', 'height', 'hair-color']
因此,为了对第一个数组进行排序,我试图使用sort方法,该方法一次比较两个数组元素,并根据一个标准确定哪个应首先排序,我的每个对象的键出现在第二阵列。问题是sort方法使用的回调只传递了两个元素,所以我无法将它们与第二个数组中的任何内容进行比较,因为它超出了回调的范围。非常感谢您的任何帮助,谢谢。
答案 0 :(得分:1)
这是一个可以做到这一点的功能。我必须说你的第一个数据结构有点奇怪,因为没有简单的方法来获取第一个数组中每个对象的密钥。但是,我采用了一种时髦的方式来做到这一点并确实排序:
var source = [{height: '5 feet'}, {name: 'john'}, {'hair-color': 'brown'}];
var desiredOrder = ['name', 'height', 'hair-color'];
function sortBy(src, order) {
// assumes both src and order are the same length and every item in source has a
// matching item in order and there are no empty objects in src
// this is a funky function who's job it is to find the first key in the
// object. Why the OP used a data structure like this, I have no idea!
// It makes no sense to me because it's next to impossible to use in real life
function findKey(obj) {
for (var i in obj) {
if (obj.hasOwnProperty(i)) {
return(i);
}
}
}
// make an object that has each of the keys in it with the sort order as the value
var sortHash = {};
var i;
for (i = 0; i < order.length; i++) {
sortHash[order[i]] = i;
}
var result = new Array(src.length);
var key;
for (i = 0; i < src.length; i++) {
key = findKey(src[i]);
result[sortHash[key]] = src[i];
}
return(result);
}
var result = sortBy(source, desiredOrder);
你可以在这里看到它:http://jsfiddle.net/jfriend00/Y8xnY/。