Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用函数中的变量对对象数组中的值进行排序_Javascript_Sorting_Object - Fatal编程技术网

Javascript 使用函数中的变量对对象数组中的值进行排序

Javascript 使用函数中的变量对对象数组中的值进行排序,javascript,sorting,object,Javascript,Sorting,Object,我正在尝试创建一个函数,在该函数中,它接受对值进行排序所需的对象的键(在本例中为“kills”)。我尝试使用中所述的dynamicSort,但我只是得到了返回的列表。你知道我做错了什么吗 const list=[ { 名称:“指南针”, 死亡人数:35人, 助攻:312 }, { 名字:'另一个', 死亡人数:52人, 助攻:32次 }, { 名字:'另一个是另一个', 死亡人数:12人, 助攻:30次 } ]; const sortByType=(属性)=>{ 返回函数(a,b){ 让结果;

我正在尝试创建一个函数,在该函数中,它接受对值进行排序所需的对象的键(在本例中为“kills”)。我尝试使用中所述的
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人,
屁股