2017-06-27 17 views
0

文字列値で配列を並べ替えるにはどうすればよいですか?配列を文字列値で並べ替える

['you', 'I', 'me', 'me', 'will', 'me']のような配列を持つ場合、配列の先頭にある単語meを持つすべてのインデックスを取得するにはどうすればよいですか?

array.sortを使用しようとしましたが、動作していないようです。

e.target.valueはdomの<select要素から取得した値です。

arr.sort((a, b) => { 
    if (a < e.target.value) { 
     return -1; 
    } 
    if (a > e.target.value) { 
     return 1; 
    } 

    return 0; 
}); 

UPDATE: ユーリーの答えは非常にうまく動作しますが、私はオブジェクトの配列で2つの値を一致し、それらをソート持つために何が必要な場合。

例:

arr = [ 
    {id: 1, name: "cookie"}, 
    {id: 2, name: 'foo'}, 
    {id: 3, name: 'bar'}, 
    {id: 2, name: 'foo'} 
]; 

がどのように私は「2」IDを持つすべての要素を配置し、配列の先頭に名「foo」で持つことができますか?

+0

「me」という単語のすべてのインデックスを検索したいですか? –

+0

はい、単語 "me"を持つこれらのインデックスをすべて配列の先頭に移動します。だから、インデックス0,1,2は私でなければならないし、インデックス3、4、5は 'あなた'、 '私'、 '意志'でなければならない – henhen

+0

'['私、'私 '、'あなたがそれらを並べ替えることを望むならば、「私」、「私」、「あなた」、「あります」] –

答えて

4

あなたは最初のものは与えられたと一致しない場合にのみ、項目の順序を切り替え、コールバック関数を使用してarrArray.prototype.sort()メソッドを使用してソート

let a = ['you', 'I', 'me', 'me', 'will', 'me']; 
 

 
a.sort((a, b) => a !== b && b === 'me' ? 1 : 0); 
 

 
console.log(a)

+0

私からの非常に良いアプローチ(+1)。 – Christos

+0

オブジェクトに2つの値で2つの一致が必要な場合はどうなりますか?私はこの問題を含めるために私の質問を更新しました。 – henhen

+0

'b.propname'を使って比較するプロパティにアクセスします –

0
const arr = [ 
    {id: 1, name: "cookie"}, 
    {id: 2, name: 'foo'}, 
    {id: 3, name: 'bar'}, 
    {id: 2, name: 'foo'} 
]; 

を使用することができます基準と2番目の基準があります。

arr.sort((item1, item2) => { 
    if((item1.id !== 2 || item1.name !== 'foo') && (item2.id === 2 || item2.name === 'foo')) { 
    return 1; 
    } 

    return 0; 
}); 

console.log(arr); 
関連する問題