Javascript 排序重要性 字符串数组



我有一个字符串数组,其中包含服务器检索的数据。我想根据其元素的重要性对该数组进行排序。

这是我的代码:

 // once the server is called, save the information by changing the order
let formattedData: Array<string> = this.$scope.sortResult(data_response, true);
// This is the function that should sort the data
public sortActions = (arrayToSort: Array<string>, firstList: boolean) => {
    if (!arrayToSort || !arrayToSort.length) {
        return;
    }
    let result: Array<string> = [];
    let j: any = null;
    let listOfImportance: any = null;
    if(firstList){
        listOfImportance = ["Smith", "El", "John", "Karl", "Peter"];
    } else {
        listOfImportance = ["John", "Peter", "Karl", "El", "Smith"];
    }
     for (let i = 0, orderLength = listOfImportance.length; i < orderLength; i++) {
         let currentOrder = listOfImportance[i];
         while (-1 != (j = $.inArray(currentOrder, arrayToSort))) {
             result.push(arrayToSort.splice(j, 1)[0]);
         }
         return result.concat(arrayToSort);
     }
}

问题是,如果data_response(因此服务器的结果)是,例如,["Peter", "John"] sortActions(data_response, true)的结果是["Peter", "John"],那么它没有正确排序。事实上,预期结果将是:["John", "Peter"]

也许问题是服务器响应不包含重要性列表中的所有项目?

我认为你的问题是这条线

     return result.concat(arrayToSort);

这应该在函数的最后一行 for 之外,以便仅在可以排序的所有内容都排序后添加剩余项目。

但是,我建议您不要重新发明轮子,而是使用语言中的默认排序函数。首先,使用优先级函数映射元素,如下所示:

return array.sort((a, b) => priority(a) - priority(b));
优先级函数

是将元素映射到其优先级(整数)的函数,例如,

const priority = el => listOfImportance.indexOf(el);

将按数组中指定的顺序排序;第一个元素的优先级为 0,结果中的第一个元素,第二个元素的优先级为 1,依此类推。

最新更新