繁体   English   中英

我想根据javascript中的另一个数组对数组进行排序?

[英]I want to sort an array according to another array in javascript?

我的朋友为我写了这段代码,但不幸的是,我不能完全理解这段代码,我知道 push、filter 和 forEach 的方法做了什么但我无法理解函数中发生了什么,所以我正在寻找一个简短的函数的解释。 谢谢。

items = [ 
    ['Anne', '1'],
    ['Bob', '2'],
    ['Henry', '3'],
    ['Andrew', '4'],
    ['Jason', '5'],
    ['Thomas', '6']
]

sorting = [ '1', '2', '3', '4', '5', '6' ];
result = []
sorting.forEach(function(key) {
    var found = false;
    items = items.filter(function(item) {
        if(!found && item[1] == key) {
            result.push(item);
            found = true;
            return false;
        } else 
            return true;
    })
})

result.forEach(function(item) {
    document.writeln(item[0])
}) 

filter()调用过滤掉数组中编号与key匹配的第一个元素。 found变量用于在找到匹配项后停止过滤,数组的其余部分原样返回。

在进行过滤时,它会将该项推送到结果列表中。

更直接的写法是:

 sorting.forEach(function(key) { var index = items.findIndex(item => item[1] == key); if (index != -1) { result.push(items[index]); items.splice(index, 1); } })

您可以通过获取项目的索引并将增量作为排序值来进行直接排序,而不是使用奇怪的方法过滤给定数据的每个元素。

这种方法采用Array#sort和 delta 来定义两个项目之间的关系。

 var items = [['Andrew', '4'], ['Bob', '2'], ['Anne', '1'], ['Henry', '3'], ['Jason', '5'], ['Thomas', '6']], sorting = [ '1', '2', '3', '4', '5', '6' ]; items.sort((a, b) => sorting.indexOf(a[1]) - sorting.indexOf(b[1])); console.log(items);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM