排序数组,优先考虑一些项目

时间:2015-07-29 16:22:09

标签: javascript arrays sorting

我需要对数组进行排序,以相同的顺序从预先排序的数组中删除项目。例如:

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

1 个答案:

答案 0 :(得分:4)

喜欢这个吗?

result = _.intersection(Preordered, Input).concat(
    _.difference(Input, Preordered))