Javascript 使用函数中的变量对对象数组中的值进行排序
我正在尝试创建一个函数,在该函数中,它接受对值进行排序所需的对象的键(在本例中为“kills”)。我尝试使用中所述的Javascript 使用函数中的变量对对象数组中的值进行排序,javascript,sorting,object,Javascript,Sorting,Object,我正在尝试创建一个函数,在该函数中,它接受对值进行排序所需的对象的键(在本例中为“kills”)。我尝试使用中所述的dynamicSort,但我只是得到了返回的列表。你知道我做错了什么吗 const list=[ { 名称:“指南针”, 死亡人数:35人, 助攻:312 }, { 名字:'另一个', 死亡人数:52人, 助攻:32次 }, { 名字:'另一个是另一个', 死亡人数:12人, 助攻:30次 } ]; const sortByType=(属性)=>{ 返回函数(a,b){ 让结果;
dynamicSort
,但我只是得到了返回的列表。你知道我做错了什么吗
const list=[
{
名称:“指南针”,
死亡人数:35人,
助攻:312
},
{
名字:'另一个',
死亡人数:52人,
助攻:32次
},
{
名字:'另一个是另一个',
死亡人数:12人,
助攻:30次
}
];
const sortByType=(属性)=>{
返回函数(a,b){
让结果;
if(a[属性]b[属性]){
结果=1;
}
否则{
结果=0;
}
返回结果;
};
}
让newList=list.sort(sortByType('kills');
console.log(newList)代码>嘿,您只需使用sort函数中的属性对数组进行排序即可
升序a[属性]-b[属性]
降序排列b[属性]-a[属性]
按名称排序是将所有名称转换为一个数组,对它们进行排序,然后循环排序。这在n^2
中运行,因此值得研究优化,但这将帮助您完成任务
注意:如果名称
是未定义
,此功能将不起作用
const list=[
{
名称:“指南针”,
死亡人数:35人,
助攻:312
},
{
名字:'另一个',
死亡人数:52人,
助攻:32次
},
{
名字:'另一个是另一个',
死亡人数:12人,
助攻:30次
}
]
常量排序字符串=()=>{
const strings=list.map(prop=>prop.name.sort();
设排序=[];
for(字符串中的常量idx){
设currString=strings[idx];
用于(列表中的常量对象){
console.log(currString,list[objIdx].name)
if(列表[objIdx].name==currString){
已排序的.push(列表[objIdx]);
}
}
}
返回排序;
}
常量dynamicSortByType=(属性)=>{
返回列表[0][property]=='string'的类型?
sortByString():list.sort((a,b)=>a[property]-b[property])
}
log(dynamicSortByType('name'))
您只需使用sort函数中的属性对数组进行排序即可
升序a[属性]-b[属性]
降序排列b[属性]-a[属性]
按名称排序是将所有名称转换为一个数组,对它们进行排序,然后循环排序。这在n^2
中运行,因此值得研究优化,但这将帮助您完成任务
注意:如果名称
是未定义
,此功能将不起作用
const list=[
{
名称:“指南针”,
死亡人数:35人,
助攻:312
},
{
名字:'另一个',
死亡人数:52人,
助攻:32次
},
{
名字:'另一个是另一个',
死亡人数:12人,
助攻:30次
}
]
常量排序字符串=()=>{
const strings=list.map(prop=>prop.name.sort();
设排序=[];
for(字符串中的常量idx){
设currString=strings[idx];
用于(列表中的常量对象){
console.log(currString,list[objIdx].name)
if(列表[objIdx].name==currString){
已排序的.push(列表[objIdx]);
}
}
}
返回排序;
}
常量dynamicSortByType=(属性)=>{
返回列表[0][property]=='string'的类型?
sortByString():list.sort((a,b)=>a[property]-b[property])
}
console.log(dynamicSortByType('name'))
简短回答:
您只是缺少了单词else
长答覆:
你有一块看起来像
if () {
}
if () {
}
else {
}
应该是这样的:
if () {
}
else if () {
}
else {
}
注意在第二个if
之前添加else
。如果没有它,第二个if-else将运行,最后一个else将取代第一个if
的真实案例所做的设置
例如,任何时候if(a[property]
,它实际上都会通过第二个if
的else
,并导致设置result=0
以下是您的代码片段,其中包含了微小的修复:
const list=[
{
名称:“指南针”,
死亡人数:35人,
助攻:312
},
{
名字:'另一个',
死亡人数:52人,
助攻:32次
},
{
名字:'另一个是另一个',
死亡人数:12人,
助攻:30次
}
];
const sortByType=(属性)=>{
返回函数(a,b){
让结果;
if(a[属性]b[property]){/*已修复:在此行添加了'else'*/
结果=1;
}
否则{
结果=0;
}
返回结果;
};
}
让newList=list.sort(sortByType('kills');
console.log(newList);
简短回答:
您只是缺少了单词else
长答覆:
你有一块看起来像
if () {
}
if () {
}
else {
}
应该是这样的:
if () {
}
else if () {
}
else {
}
注意在第二个if
之前添加else
。如果没有它,第二个if-else将运行,最后一个else将取代第一个if
的真实案例所做的设置
例如,任何时候if(a[property]
,它实际上都会通过第二个if
的else
,并导致设置result=0
以下是您的代码片段,其中包含了微小的修复:
const list=[
{
名称:“指南针”,
死亡人数:35人,
助攻:312
},
{
名字:'另一个',
死亡人数:52人,
助攻:32次
},
{
名字:'另一个是另一个',
死亡人数:12人,
屁股