我正在尝试将对象与数组进行排序。因此循环将在数组上查找特定值,直到找到一个,并将这3个元素放在开头,其余放在结尾。 我不确定这个想法的最佳方法是什么?
就是这样:
var arr = [1, 3, 2,4,5,6, 2];
var arrSimilar = [1,2,5]
var testSortBy = _.sortBy(arr, function(arrSimilar){
// [1,2,5,3,4,6,2]
});
console.log(testSortBy); // [1,2,5,3,4,6,2]
答案 0 :(得分:1)
您可以使用sorting with map并将similar
数组的值索引作为priority
排序,然后将所有其他值的索引作为顺序。
重要的是删除similar
数组的已使用值,因为它现在正在使用中,并且对于其他类似值没有意义。这意味着,相同的值将按其原始相对索引进行排序。
var array = [1, 3, 2, 4, 5, 6, 2],
similar = [1, 2, 5],
result = array
.map(function (a, i) {
var priority = similar.indexOf(a);
delete similar[priority]; // delete value, but keep the index of other items
return { index: i, priority: (priority + 1) || Infinity };
})
.sort(function (a, b) {
return a.priority - b.priority || a.index - b.index;
})
.map(function (o) {
return array[o.index];
});
console.log(result); // [1, 2, 5, 3, 4, 6, 2]
答案 1 :(得分:0)
您可以通过以下方式执行此操作
var arr = [1, 3, 2,4,5,6];
var arrSimilar = [1,2,5];
let bInterA = arrSimilar.filter((e) => arr.indexOf(e) != -1);
let aDiffb = arr.filter((e) => arrSimilar.indexOf(e) == -1);
console.log(bInterA.concat(aDiffb));