Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.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/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
Javascript 按规则对列表排序_Javascript_Sorting - Fatal编程技术网

Javascript 按规则对列表排序

Javascript 按规则对列表排序,javascript,sorting,Javascript,Sorting,我有一张清单需要分类 ['Product ED', 'Product CX', 'Product XY', 'Product ED'] 此列表必须按照定义的规则进行排序: ['CX', 'XY', 'ED'] 因此,最终列表必须按照此规则排序,如下所示: ['Product CX', 'Product XY', 'Product ED', 'Product ED'] 您将如何实现这样的算法 编辑: 嗯,在我写了这个问题之后,我想到了一个简单的想法 这是: var l = ['Product

我有一张清单需要分类

['Product ED', 'Product CX', 'Product XY', 'Product ED']
此列表必须按照定义的规则进行排序:

['CX', 'XY', 'ED']
因此,最终列表必须按照此规则排序,如下所示:

['Product CX', 'Product XY', 'Product ED', 'Product ED']
您将如何实现这样的算法

编辑: 嗯,在我写了这个问题之后,我想到了一个简单的想法

这是:

var l = ['Product ED', 'Product CX', 'Product XY', 'Product ED'];
var rules = ['CX', 'XY', 'ED'];

l.sort(function(a, b) {
    return rules.indexOf(a.replace(/^Product /, '')) > rules.indexOf(b.replace(/^Product /, ''));
})

['Product CX'、'Product XY'、'Product ED'、'Product ED']

好吧,快速而肮脏的方法是在每个值前面加上一个排序键。”1产品CX”、“2产品XY”等,对其进行排序,然后将其剥离

只需确保附加的排序键长度相同,如果超过10,则需要'01','02'等


如果要正确执行此操作,则需要定义一个比较函数并将其作为参数传递给“sort”函数:

更正式地说,可以定义一个比较函数,该函数从要排序的列表中获取两个元素,即规则列表,如果第一项大于第二项,则返回1(根据规则)如果较小,则为-1;如果相同,则为0。然后,任何基于比较的排序都会起作用

复杂度:T(n)=2T(n/2)+O(nm)=?O(m n log n)可以使用例如合并排序。。。正确的?(注意:n是列表中要排序的元素数,m是规则集的大小)。

var list=[“产品ED”、“产品CX”、“产品XY”、“产品ED”];
变量规则=['CX','XY','ED'];
列表.排序(函数(a,b){
var-aIndex,bIndex;
对于(变量i=0;i0){
aIndex=rule.indexOf(aMatch[0])
}
如果(bMatch&&bMatch.length>0){
bIndex=rule.indexOf(bMatch[0]);
}
if(bIndex&aIndex){
继续;
}
}
if(aIndexbIndex)返回1;
否则返回0;
})
console.log(列表)
    var list = ['Product ED', 'Product CX', 'Product XY', 'Product ED'];
    var rule = ['CX', 'XY', 'ED'];

    list.sort(function(a, b) {
        var aIndex, bIndex;
        for (var i = 0; i < rule.length; i++) {
            var aMatch = a.match(rule[i]);
            var bMatch = b.match(rule[i]);
            if (aMatch && aMatch.length > 0) {
                aIndex = rule.indexOf(aMatch[0])
            }
            if (bMatch && bMatch.length > 0) {
                bIndex = rule.indexOf(bMatch[0]);
            }

            if (bIndex && aIndex) {
                continue;
            }
        }

        if (aIndex < bIndex) return -1;
        else if (aIndex > bIndex) return 1;
        else return 0;
    })

    console.log(list)