javascript - Adakah terdapat cara untuk mengisih objek dalam js?
仅有的幸福
仅有的幸福 2017-06-29 10:09:03
0
10
1068

Sebuah objek json telah dikembalikan di latar belakang, dan pesanan telah diatur

Tetapi apabila saya menggunakan js to for in untuk melintasi objek ini seperti melintasi tatasusunan, hasilnya berbeza daripada objek asal Selepas menyemak maklumat, saya mendapati objek js tidak tertib. . Jadi adakah terdapat cara untuk melintasi objek ini secara berurutan? Atau bagaimana untuk mendapatkan sifat objek asal dalam susunan?

仅有的幸福
仅有的幸福

membalas semua(10)
为情所困
ss.sort(function(a, b){
    return a.UserID > b.UserID;
});
phpcn_u1582
var obj = {
    1 :[{userID:'1'}],
    2 :[{userID:'2'}],
    H :[{userID:'3'}],
    Z :[{userID:'4'}],
};
var objKeys = Object.keys(obj);
objKeys.sort((a,b) =>{
    return a>b;
}).map((val) => {
    console.log("userID "+ obj[val][0].userID)
});
/ 输出
// userID 1
// userID 2
// userID 3
// userID 4
巴扎黑

Tiada penyelesaian. Jika diisih, anda harus menggunakan tatasusunan. Atau dengan pelbagai kunci.

Susunan dalam objek tidak dinyatakan dalam ES5, jadi enjin yang berbeza mungkin berbeza.

Dalam ES6, Object.getOwnPropertyNames()Object.getOwnPropertySymbols() 以及等效于两者结合的 Reflect.ownKeys() akan dikeluarkan dalam susunan tertentu, tetapi ia bukan jawapan yang anda mahukan.

Nampaknya struktur json disusun mengikut susunan nombor dan kamus Jika ini berlaku, anda boleh menyusunnya secara manual.

phpcn_u1582

1 Saya merasakan bahawa jika paparan halaman anda betul-betul dalam susunan pengisihan yang dikembalikan oleh bahagian belakang, maka anda tidak perlu mengisih, cuma paparkannya secara terus.
2 Jika pesanan yang diingini berbeza daripada pesanan bahagian belakang, maka ia bergantung pada medan mana produk diisih dan dipaparkan. Kemudian anda mengisih berdasarkan medan ini dalam objek.
Anda sepatutnya boleh mendapatkan apa yang anda mahukan.

世界只因有你
// 对array 排序
 res.sort((a, b) => {
   if (a.UserID > b.UserID ) {  // 可以改成其他key
      return 1
   } else {
      return -1
   }
  })
过去多啦不再A梦

Oleh kerana objek json tidak mempunyai susunan, "perintah yang telah diatur" sebenarnya tidak wujud
Jika bahagian hadapan ingin mengisih berdasarkan nama kunci, ia boleh mengeluarkan nama kunci, mengisihnya, dan kemudian mendapatkan kandungannya.

仅有的幸福

Memandangkan latar belakang mengembalikan data yang diisih, jika anda menggunakan ajax untuk meminta data, dataType: json, selepas anda menerima data, hanya melintasinya terus dan mengisinya dalam templat. Jika pesanan salah, saya rasa ia adalah kerana data yang anda dapat dari latar belakang adalah salah

代言
Object.keys(objs).sort()可以获取到排好序的keys
var objs = {
    f: {
        id: 2,
        name: '2'
    }, 
    a: {
        id: 3,
        name: '3'
    }, 
    c: {
        id: 1,
        name: '1'
    }
};
// 自定义排序规则,按对象的id排序
var sortedObjKeys = Object.keys(objs).sort(function(a, b) {
    return objs[b].id - objs[a].id;
});

// 按默认排序规则,按对象的key排序
var sortedObjKeys = Object.keys(objs).sort();

for (var index in sortedObjKeys) {
    console.log(sortedObjKeys[index]);
    console.log(objs[sortedObjKeys[index]]);
    console.log('----------');
}
过去多啦不再A梦

Jika anda ingin mempunyai nilai berjujukan, simpannya dalam tatasusunan, kemudian letakkannya dalam atribut json.

小葫芦
Object.keys(obj).sort(function() {
    // 为了以防万一,这里先排好键值顺序,代码省略,也可以直接用sort()默认排序
}).map(function(v) {
    return obj[v]; // 根据原键名从obj中再找对应的项
});

Dengan cara ini, tatasusunan dikembalikan, yang berada dalam susunan tetap.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan