我正在尝试创建一个排序函数,在动态地(以不同的深度)给出一个键的同时,对嵌套的对象数组进行排序。
sortByKey(array, key){
var splitKey = key.split(".");
if(splitKey.length = 2){
return array.sort(function(a, b) {
var x = a[splitKey[0]][splitKey[1]]; var y = b[splitKey[0]][splitKey[1]];
return ((x < y) ? -1 : ((x > y) ? 1 : 0));
});
} else {
return array.sort(function(a, b) {
var x = a[key]; var y = b[key];
return ((x < y) ? -1 : ((x > y) ? 1 : 0));
});
}
}
我想去掉if - else
,用for
循环代替。目标是函数可以使用“name”、“name.first”和“name.first.another”(作为示例)。有没有办法动态地完成这个任务?
换句话说,我想对不同的数组使用相同的函数,所以对于一个数组,我想调用sortByKey(array1,'name'),然后调用另一个sortByKey(array2,'location.address'),也许还有第三个sortByKey(array3,' location.address.postcode'),或者类似的东西。
3条答案
按热度按时间iyfjxgzm1#
提取属性提取函数
并使用它来很好地提取值:)
jjhzyzn02#
我想你的意思是这样的:
hvvq6cgz3#
你的问题是一个误用的赋值语句,它应该是一个比较。
较短的方法可以使用
Array#reduce
。ES6
一个二个一个一个