我需要对数组进行排序,以相同的顺序从预先排序的数组中删除项目。例如:
Input: [ 5, 4, 7, 2, 3, 9, 8 ]
Preordered: [ 1, 2, 4, 3 ]
基本上,preordered
数组会强制input
数组遵循此顺序,但仅限于两者都存在项目。如果不存在,将检查下一个索引。 preordered
数组中不存在的项目将按原始顺序维护。继续举例:
▼ ▼ ▼ // exists on preordered array
Input: [ 5, 4, 7, 2, 3, 9, 8 ]
▼ // not exists on index array, so ignore it:
Preordered: [ 1, 2, 4, 3 ].intersect(input) => [ 2, 4, 3 ]
有了这个,我们可以确定input
数组上preordered
上的三个项目。所以这些项目将首先出现在结果中。 input
上的其他项目将保留原始订单,但在初始排序后:
▼ ▼ ▼ // keeping preordered array order
Result: [ 2, 4, 3, 5, 7, 9, 8 ]
▲ ▲ ▲ ▲ // keeping others items original order
请注意,预订将保留原始订单。
PS。如果需要,我可以使用underscore
。
答案 0 :(得分:4)
喜欢这个吗?
result = _.intersection(Preordered, Input).concat(
_.difference(Input, Preordered))