2017-09-18 10 views
0

配列と比較してオブジェクトをソートしようとしています。したがって、ループは、配列の特定の値を見つけだすまで探し、その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

? – guest271314

+0

はい彼らは再提出することができます – MariaZ

+0

期待される結果に2つの「5」がないのはなぜですか? – guest271314

答えて

0

あなたは次のように

  1. と仮定A []は、元の配列であることを行うことができますし、Bが優先アレイ
  2. 答えです(B交差点A)コンカット(AB)

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));

1

あなたはsorting with mapを使用してsimilar配列の値のインデックスを取るpriorityとしてソートしてから注文として他のすべての値のインデックスを取ることができます。

similarアレイの使用されている値を削除することは重要です。これは、現在使用されており、それ以上の類似した値には意味がないためです。つまり、同じ値が元の相対インデックスにソートされます。 2 `の2`sアレイを得に要素として含まれている

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]

+0

私は試してみます – MariaZ

+0

これは何よりも理にかなっています!...ありがとう! – MariaZ