[英]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.