Rumah > Soal Jawab > teks badan
Saya mempunyai tatasusunan objek Saya mahu ia disusun mengikut susunan yang saya nyatakan Seperti berikut, ia disusun mengikut susunan nama yang saya nyatakan sebarang lodash atau kaedah lain? Bolehkah pakej terkenal daripada tiga pihak mencapai kesan berikut, atau adakah cara lain yang lebih cekap dan mudah untuk menulisnya?
var arr = [
{
name:'小麦',
phone:'112233'
},
{
name:'绿绿',
phone:'4445566'
},
{
name:'增增',
phone:'321321'
},
{
name:'弱弱',
phone:'123123'
}
];
//希望达到的顺序 (我已知所有元素)
var order = {
'增增':0,
'弱弱':1,
'绿绿':2,
'小麦':3
};
var newOrderedArr = [];
arr.forEach((element)=>{
newOrderedArr[order[element.name]] = element;
});
console.log(newOrderedArr);
Hasil konsol adalah seperti berikut
[ { name: '增增', phone: '321321' },
{ name: '弱弱', phone: '123123' },
{ name: '绿绿', phone: '4445566' },
{ name: '小麦', phone: '112233' } ]
黄舟2017-06-28 09:29:54
Jika orders
里面是按 0 ~ n
mempunyai nilai berterusan, maka kaedah anda sudah sangat, sangat pantas, dan kaedah perpustakaan lain tidak dapat mencapai kelajuan ini (kerana mereka akan mempertimbangkan situasi tidak berterusan)
Jika tidak berterusan, anda boleh menggunakan sort
newOrderedArr = arr.sort((a, b) => order[a.name] - order[b.name]);
Atau anda boleh menggunakan kaedah anda dan menambah penapis
newOrderedArr = newOrderedArr.filter(n => n);
Tambahan: Untuk kes nombor siri tidak berturut-turut, perbandingan tanpa pengisihan adalah seperti yang ditunjukkan dalam rajah
漂亮男人2017-06-28 09:29:54
Idea ini nampaknya sangat pantas. Dari perspektif kemudahan penggunaan, indeks pesanan boleh dijana supaya tatasusunan nama boleh dimasukkan setiap kali.
Tetapi tidak jika ada nama pendua. Anda perlu mengekalkan rekod tatasusunan untuk setiap nama dan akhirnya menggabungkannya