Javascript按字母顺序排序匹配字符串的开头,然后按字母顺序排列包含的文本

Leo*_*oni 6 javascript sorting

我需要帮助整理一些数据.假设我在搜索字段中输入"piz".我得到的回报和数组包含所有包含"piz"的条目.

我现在想按以下顺序显示它们:

pizza 
pizzeria
apizzetto
berpizzo
Run Code Online (Sandbox Code Playgroud)

首先是我按字母顺序键入的项目,然后是按字母顺序键入的内容.

相反,如果我按字母顺序排序,我得到以下内容

apizzetto
berpizzo
pizza 
pizzeria
Run Code Online (Sandbox Code Playgroud)

有谁知道如何做到这一点?谢谢你的帮助.

jfr*_*d00 10

您可以将数据拆分为两个数组,一个以输入开头,另一个不输入.单独排序,然后结合两个结果:

var data = [
    'pizzeria',
    'berpizzo',
    'apizzetto',
    'pizza'
];

function sortInputFirst(input, data) {
    var first = [];
    var others = [];
    for (var i = 0; i < data.length; i++) {
        if (data[i].indexOf(input) == 0) {
            first.push(data[i]);
        } else {
            others.push(data[i]);
        }
    }
    first.sort();
    others.sort();
    return(first.concat(others));
}

var results = sortInputFirst('piz', data);
Run Code Online (Sandbox Code Playgroud)

你可以在这里看到它的工作:http://jsfiddle.net/jfriend00/nH2Ff/


jus*_*tal 5

正确的完整解决方案是:

var data = [
    'pizzeria',
    'berpizzo',
    'apizzetto',
    'pizza'
];

var _sortByTerm = function (data, term) {
    return data.sort(function (a, b) {
       return a.indexOf(term) < b.indexOf(term) ? -1 : 1;
    });
};

var result = _sortByTerm(data, 'piz');
Run Code Online (Sandbox Code Playgroud)

如果要对象排序,请使用以下功能:

var _sortByTerm = function (data, key, term) {
     return data.sort(function (a, b) {
        return a[key].indexOf(term) < b[key].indexOf(term) ? -1 : 1;
     });
 };
Run Code Online (Sandbox Code Playgroud)