带有首选项的字符串的Javascript排序数组
我试图用JavaScript对数组进行排序,但我希望一个特定项始终位于排序的第一位,另一个特定项始终位于最后:带有首选项的字符串的Javascript排序数组,javascript,arrays,sorting,Javascript,Arrays,Sorting,我试图用JavaScript对数组进行排序,但我希望一个特定项始终位于排序的第一位,另一个特定项始终位于最后: var Person= [{ "Country": "Japan", "Name": "user1" }, { "Country": "Spain", "Name": "user24" }, { "Country": "Usa", "Name": "user1" }, { "Country": "Brazil", "Name": "
var Person= [{
"Country": "Japan",
"Name": "user1"
}, {
"Country": "Spain",
"Name": "user24"
}, {
"Country": "Usa",
"Name": "user1"
}, {
"Country": "Brazil",
"Name": "user1"
}];
这是我的比较功能:
function compare(a,b) {
if (a.Country< b.Country)
return -1;
if (a.Country> b.Country)
return 1;
//here aditional condition
if(a.Country=="Spain") //condition for last item
return 2;
if(a.Country=="Brazil") //condition for always in first item
return -1;
return 0;
}
功能比较(a、b){
如果(a国b.国家)
返回1;
//这里是传统条件
如果(a.Country==“西班牙”)//最后一项的条件
返回2;
if(a.Country==“巴西”)//始终在第一项中的条件
返回-1;
返回0;
}
我正在运行Person.sort(比较)
进行排序。首先,您还需要对照这些字符串检查b
,其次,您的特殊比较需要排在常规比较之前
工作现场演示:
功能比较(a、b){
如果(a.Country==“西班牙”)返回1;
如果(a.Country==“巴西”)返回-1;
如果(b.Country==“西班牙”)返回-1;
如果(b.国家==“巴西”)返回1;
如果(a.Countryb.国家)返回1;
返回0;
}
个人变量=[{
“国家”:“日本”,
“名称”:“user1”
}, {
“国家”:“西班牙”,
“名称”:“user24”
}, {
“国家”:“美国”,
“名称”:“user1”
}, {
“国家”:“巴西”,
“名称”:“user1”
}];
Person.sort(比较);
控制台日志(个人)
当b.country==“西班牙”
和b.country==“巴西”
时,您需要检查条件……在正常比较之前,您需要检查这些条件。为什么不按国家分组<代码>Person.reduce(函数(o,current){o[current.Country]=(o[current.Country]| |【】)。concat(current.Name);return o},{})
。谢谢“因子的顺序确实会改变结果”:)嗨@jearca,你觉得我完全回答了你的问题吗?如果是这样,请不要忘记单击左侧的灰色复选标记,将我的答案标记为“已接受”。如果您的问题还没有完全回答,请详细说明您还需要知道什么,以便社区能够为您提供进一步的帮助!谢谢