Javascript 复杂类型的对象数组

Javascript 复杂类型的对象数组,javascript,Javascript,我有一个变量和对象数组,例如: var selectedName = 'fff'; [{ percentage: Math.round(percentage), count: count, name: 'bbb', index: 11, }, { percentage: Math.round(percentage), count: 200, name: 'aaa', index: 2, }, { percentage: M

我有一个变量和对象数组,例如:

var selectedName = 'fff';

[{
    percentage: Math.round(percentage),
    count: count,
    name: 'bbb',
    index: 11,
},
{
    percentage: Math.round(percentage),
    count: 200,
    name: 'aaa',
    index: 2,
},
{
    percentage: Math.round(percentage),
    count: 400,
    name: 'All',
    index: 7,
},
{
    percentage: Math.round(percentage),
    count: count,
    name: 'fff',
    index: 8,
},
{
    percentage: Math.round(percentage),
    count: count,
    name: 'ccc',
    index: 3,
}],
我想按如下方式对它们进行排序:名称为“All”的对象应该始终是第一个。下一个对象应该是名称与
selectedName
匹配的对象,在本例中为“fff”。然后,其余对象应按其“index”属性的升序排序

有一种方法可以做到这一点吗?

是的,这里有一个例子:

var selectedName='fff';
百分比=1;
让计数=2;
var数据=[{百分比:数学.轮(百分比),计数:计数,名称:“bbb”,索引:11},{百分比:数学.轮(百分比),计数:200,名称:“aaa”,索引:2},{百分比:数学.轮(百分比),计数:400,名称:“全部”,索引:7},{百分比:数学.轮(百分比),计数:计数,名称:“fff”,索引:8},{百分比:数学.轮(百分比),计数:计数,名称:“ccc”,索引:3}];
arr.sort((i,j)=>{
如果(i.name==j.name&(i.name===All'| | i.name===selectedName))返回0;
如果(i.name=='All')返回-1;
如果(j.name=='All')返回1;
如果(i.name==selectedName)返回-1;
如果(j.name==selectedName)返回1;
如果(i.indexj.index)返回1;
返回0;
})
console.log(arr)
是,下面是一个示例:

var selectedName='fff';
百分比=1;
让计数=2;
var数据=[{百分比:数学.轮(百分比),计数:计数,名称:“bbb”,索引:11},{百分比:数学.轮(百分比),计数:200,名称:“aaa”,索引:2},{百分比:数学.轮(百分比),计数:400,名称:“全部”,索引:7},{百分比:数学.轮(百分比),计数:计数,名称:“fff”,索引:8},{百分比:数学.轮(百分比),计数:计数,名称:“ccc”,索引:3}];
arr.sort((i,j)=>{
如果(i.name==j.name&(i.name===All'| | i.name===selectedName))返回0;
如果(i.name=='All')返回-1;
如果(j.name=='All')返回1;
如果(i.name==selectedName)返回-1;
如果(j.name==selectedName)返回1;
如果(i.indexj.index)返回1;
返回0;
})

console.log(arr)
确保您可以这样做:

var selectedName='fff';
风险值百分比=23;
var计数=3;
var数据=[{百分比:数学.轮(百分比),计数:计数,名称:“bbb”,索引:11},{百分比:数学.轮(百分比),计数:200,名称:“aaa”,索引:2},{百分比:数学.轮(百分比),计数:400,名称:“全部”,索引:7},{百分比:数学.轮(百分比),计数:计数,名称:“fff”,索引:8},{百分比:数学.轮(百分比),计数:计数,名称:“ccc”,索引:3}];
功能性sortItems(a,b){
如果(a.name=='All'){
返回-1
}
如果(b.name=='All'){
返回1;
}
如果(a.name==selectedName){
返回-1
}
如果(b.name==selectedName){
返回1
}
返回a.index-b.index;
}

console.log(items.sort(sortItems))确定您可以这样做:

var selectedName='fff';
风险值百分比=23;
var计数=3;
var数据=[{百分比:数学.轮(百分比),计数:计数,名称:“bbb”,索引:11},{百分比:数学.轮(百分比),计数:200,名称:“aaa”,索引:2},{百分比:数学.轮(百分比),计数:400,名称:“全部”,索引:7},{百分比:数学.轮(百分比),计数:计数,名称:“fff”,索引:8},{百分比:数学.轮(百分比),计数:计数,名称:“ccc”,索引:3}];
功能性sortItems(a,b){
如果(a.name=='All'){
返回-1
}
如果(b.name=='All'){
返回1;
}
如果(a.name==selectedName){
返回-1
}
如果(b.name==selectedName){
返回1
}
返回a.index-b.index;
}

console.log(items.sort(sortItems))您可以尝试以下方法:

主意
  • (a.name!==priorityName)
    将生成一个布尔值。在它们上使用
    -
    (减号)运算符时,它将转换为数值(真:1,假:0)
  • 因此,如果两者都不是优先级,则两者都将产生
    1
    ,输出将是
    0
    ,这在JS中是错误的
  • 前一个表达式的失败将调用当前表达式,并将循环到最后一个表达式
var selectedName='fff';
var priorityName=“全部”;
风险值百分比=50.4,计数=0;
var数据=[{百分比:数学.轮(百分比),计数:计数,名称:“bbb”,索引:11},{百分比:数学.轮(百分比),计数:200,名称:“aaa”,索引:2},{百分比:数学.轮(百分比),计数:400,名称:“全部”,索引:7},{百分比:数学.轮(百分比),计数:计数,名称:“fff”,索引:8},{百分比:数学.轮(百分比),计数:计数,名称:“ccc”,索引:3}];
数据排序(函数(a,b){
return(a.name!==priorityName)-(b.name!==priorityName)||
(a.name!==selectedName)-(b.name!==selectedName)||
a、 指数-b.index;
})

console.log(数据)
您可以尝试以下方法:

主意
  • (a.name!==priorityName)
    将生成一个布尔值。在它们上使用
    -
    (减号)运算符时,它将转换为数值(真:1,假:0)
  • 因此,如果两者都不是优先级,则两者都将产生
    1
    ,输出将是
    0
    ,这在JS中是错误的
  • 前一个表达式的失败将调用当前表达式,并将循环到最后一个表达式
var selectedName='fff';
var priorityName=“全部”;
风险值百分比=50.4,计数=0;
var数据=[{百分比:数学.轮(百分比),计数:计数,名称:“bbb”,索引:11},{百分比:数学.轮(百分比),计数:200,名称:“aaa”,索引:2},{百分比:数学.轮(百分比),计数:400,名称:“全部”,索引:7},{百分比:数学.轮(百分比),计数:计数,名称:“fff”,索引:8},{百分比:数学.轮(百分比),计数:计数,名称:“ccc”,索引:3}];
数据排序(函数(a,b){
return(a.name!==priorityName)-(b.name!==priorityName)||
(a.name!==selectedName)-(b.name!==selectedName)||
a、 指数-b.index;
})

console.log(data)
您可以使用一个帮助对象来保存每个元素的优先级。在您的特定情况下,最高优先级具有
All

<