关键值排序数组 [英] Sort array on key value
本文介绍了关键值排序数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我目前通过排序名称的功能及价值/密钥对的数组。
我不知道如何可以通过在其上进行排序,所以我可以调用同一个函数像这样每一次的关键是:
VAR ARR = [{名称:'鲍勃',艺术家:鲁迪},
{名称:'johhny',艺术家:drusko},
{名称:'斗嘴',艺术家:needell},
{名称:'顶',艺术家:'齿轮'}]排序(ARR,'名'); //试图以按名称排序
排序(ARR,艺术家); //试图通过艺术家排序功能排序(ARR){
arr.sort(功能(A,B){
变种NAMEA = a.name.toLowerCase(),nameB = b.name.toLowerCase();
如果(NAMEA< nameB)//串排序升序
返回-1;
如果(NAMEA> nameB)
返回1;
返回0; //默认返回值(不排序)
});
}
解决方案
下面是两个排序功能,可能是有用的:
//的价值观排序
功能SRT(DESC){
返回功能(A,B){
回报递减? ~~(A< B):~~(A> B);
};
}//排序的键值
功能keysrt(键,DESC){
返回功能(A,B){
回报递减? ~~(A [关键]< B [关键]):~~(一个[关键]> B [关键]);
}
}
有关阵列可以排序的名称使用:
VAR ARR = [{名称:'鲍勃',艺术家:鲁迪'}
{名称:'johhny',艺术家:drusko'}
{名称:'斗嘴',艺术家:needell'}
{名称:'顶',艺术家:'齿轮'}]
的.sort(keysrt('名'));
您还可以结合排序功能:
函数SRT(DESC,键){
返回功能(A,B){
回报递减? ~~(键[关键]< B [关键]:A< B)
(?键[KEY]> B [关键]:A> B):~~;
};
}
和使用
VAR ARR = [{名称:'鲍勃',艺术家:鲁迪'}
{名称:'johhny',艺术家:drusko'}
{名称:'斗嘴',艺术家:needell'}
{名称:'顶',艺术家:'齿轮'}]
的.sort(SRT(NULL,'名'));
下面是一种全在一个解决方案中:
功能SRT(上,下行){
上= ON&功放;&安培; on.constructor ===对象?上 : {};
返回功能(A,B){
如果(on.string || ON.KEY){
A = ON.KEY? A [ON.KEY]:一个;
A = on.string?串(一).toLowerCase():一个;
B = ON.KEY? B〔ON.KEY]:B;
B = on.string?字符串(B).toLowerCase():B;
//如果key不是present,移动到结束
如果(ON.KEY&安培;&安培;!(B ||一)!){
返回A和!&安培; !B' 1:一个? 1:-1;
}
}
回降? ~~(on.string b.localeCompare(一):一个与所述; B)
:~~(on.string a.localeCompare(B):A> B);
};
}
//用法示例
A,Z,X,Y,A,B,B,Z,A,I,J,y'.split('')排序(SRT({字符串:TRUE;}));
// =>中,a,A,B,B,I,J,X,Y,Y,Z,Z
[100,7,8,2,2,0,5,1,6,5,-1]的.sort(SRT());
// => -1,0,1,2,2,5,5,6,7,8,100
[100,7,8,2,2,0,5,1,6,5,-1]的.sort(SRT({},真}));
// => 100,8,7,6,5,5,2,2,1,0,-1
VAR objarr =
[{名称:'鲍勃',艺术家:鲁迪'}
{名称:'Johhny',艺术家:drusko'}
{名称:'TIFF文件',艺术家:needell'}
{名称:'顶',艺术家:'齿轮'}]
的.sort(SRT({关键:'名',字符串:TRUE},真实));
对于(VAR I = 0; I< objarr.length; I + = 1){
的console.log(objarr [我]。名称);
}
// =>日志瑞伯,顶部,TIFF,连续约翰尼
I have a function which sorts by name currently and an array of value / key pairs.
I wonder how can I pass the key on which sort is being performed so I can call the same function every time like so:
var arr = [{name:'bob', artist:'rudy'},
{name:'johhny', artist:'drusko'},
{name:'tiff', artist:'needell'},
{name:'top', artist:'gear'}];
sort(arr, 'name'); //trying to sort by name
sort(arr, 'artist'); //trying to sort by artist
function sort(arr) {
arr.sort(function(a, b) {
var nameA=a.name.toLowerCase(), nameB=b.name.toLowerCase();
if (nameA < nameB) //sort string ascending
return -1;
if (nameA > nameB)
return 1;
return 0; //default return value (no sorting)
});
}
解决方案
Here are two sorting functions that may be useful:
// sort on values
function srt(desc) {
return function(a,b){
return desc ? ~~(a < b) : ~~(a > b);
};
}
// sort on key values
function keysrt(key,desc) {
return function(a,b){
return desc ? ~~(a[key] < b[key]) : ~~(a[key] > b[key]);
}
}
For your array you can sort on 'name' using:
var arr = [ {name:'bob', artist:'rudy'}
,{name:'johhny', artist:'drusko'}
,{name:'tiff', artist:'needell'}
,{name:'top', artist:'gear'}]
.sort(keysrt('name'));
You could also combine the sorting functions:
function srt(desc,key) {
return function(a,b){
return desc ? ~~(key ? a[key]<b[key] : a < b)
: ~~(key ? a[key] > b[key] : a > b);
};
}
And use
var arr = [ {name:'bob', artist:'rudy'}
,{name:'johhny', artist:'drusko'}
,{name:'tiff', artist:'needell'}
,{name:'top', artist:'gear'}]
.sort(srt(null,'name'));
Here's a kind of an all in one solution:
function srt(on,descending) {
on = on && on.constructor === Object ? on : {};
return function(a,b){
if (on.string || on.key) {
a = on.key ? a[on.key] : a;
a = on.string ? String(a).toLowerCase() : a;
b = on.key ? b[on.key] : b;
b = on.string ? String(b).toLowerCase() : b;
// if key is not present, move to the end
if (on.key && (!b || !a)) {
return !a && !b ? 1 : !a ? 1 : -1;
}
}
return descending ? ~~(on.string ? b.localeCompare(a) : a < b)
: ~~(on.string ? a.localeCompare(b) : a > b);
};
}
// usage examples
'a,z,x,y,a,b,B,Z,a,i,j,y'.split(',').sort( srt({string:true;}) );
//=> ,a,a,b,B,i,j,x,y,y,z,Z
[100,7,8,2,2,0,5,1,6,5,-1].sort( srt() );
//=> -1,0,1,2,2,5,5,6,7,8,100
[100,7,8,2,2,0,5,1,6,5,-1].sort( srt({},true}) );
//=> 100,8,7,6,5,5,2,2,1,0,-1
var objarr =
[ {name:'bob', artist:'rudy'}
,{name:'Johhny', artist:'drusko'}
,{name:'Tiff', artist:'needell'}
,{name:'top', artist:'gear'}]
.sort( srt({key:'name',string:true}, true) );
for (var i=0;i<objarr.length;i+=1) {
console.log(objarr[i].name);
}
//=> logs zeb, top, Tiff, Johnny consecutively
这篇关于关键值排序数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文