2017-01-31 2 views
0
var testArray = [{ 
    value: john, 
    count: 5 
}, 
{ 
    value: henry, 
    count: 2 
}, 
{ 
    value: bill, 
    count: 10 
}] 

testArray.map(function(value) { 
    //otherfunctions 
}) 

私はすでに、上記と同様のオブジェクトの配列をマッピングしています。私はカウントに基づいてランクのオブジェクトに3番目の値を追加します。 私の現在の考えは、私がすでにやっているマップを完成させ、次にカウントに基づいてデータを並べ替えてから、配列のソートされた位置に基づいてランクを割り当てます。しかし、私はすでに配列をマッピングしているので、これは長い間巻き込まれているようです?配列をループしながらランク付けする

+0

はソートされた元の配列の種類ですか? - 上記はそうではありません... –

+0

これはなぜあなたに長く巻き込まれたようですか?私は 'map()'関数を使って配列に値を加え、 'sort()'を使うことで、カウント番号を比較する関数を渡します。 –

+0

オリジナルはまったく並べ替えられていません。私はすでに配列をマッピングしているので、長い間巻き込まれているようです。それで2つの地図を走らせるのはそれが意味をなさえれば、長引くようです。 –

答えて

1

バニラJS:

var testArray = [{ 
    value: john, 
    count: 5 
}, 
{ 
    value: henry, 
    count: 2 
}, 
{ 
    value: bill, 
    count: 10 
}] 

let newArray = testArray.map(function(item) { 
    return { 
    value: item.value, 
    count: item.count, 
    newProperty: 'x' 
    } 
}).sort(function(x, z) { 
    return x.count - z.count; 
}); 

ES6:

let newArray = testArray 
.map(item => { 
    return { 
    ...item, 
    newProperty: 'x' 
    } 
}).sort((x, z) => x.count - z.count); 

P.S.これは、この計算を行うための機能的な方法であり、o(n * nlog n)時間が必要です。命令型アプローチでo(n)で実行できますが、これは読んで理解しやすくなります。著者からのコメントの後

EDIT 1 :アイテムに現在のカウントを追加したい(これは必要となる場合を考えることはできません)が、ちょうどふける:

let newArray = testArray 
.map((item, index) => { 
    return { 
    ...item, 
    currentCount: index 
    } 
}).sort((x, z) => x.count - z.count); 

は、詳細を読みますmap

+0

ありがとう、これは私がやりたいことの99%であり、完全に意味があります。しかし、私がしたいことは、newPropertyとして持っているものを持っていることです: 'x'、私はそれが各オブジェクトのカウント値との関係を持つことを望みます。この場合、x値は2,3,1(カウントの順)になります。それは理にかなっていますか? –

+0

これを真っ直ぐにするには、各オブジェクトを{value:bill、count:10、newProperty:[2,3,1]}にするか、単に[2,3,1]の値を取得したい反復後に? – ospfranco

+0

いいえ私はそれぞれのオブジェクトを{value:bill、count:10、newProperty:1}にします。ここで、新しいプロパティはカウントに関連しています。その請求書には1のnewPropertyがあるので、johnは2のnewPropertyと3のhenryを持つことになります。 –

関連する問題