Saya memiliki array objek yang memiliki nilai nol juga mirip dengan yang di bawah ini

let customerData = [{
        id: 1,
        name: 'cust1',
        address: null
    },
    {
        id: 2,
        name: 'cust2',
        address: 'test1'
    },
    {
        id: 3,
        name: 'cust3',
        address: 'add2'
    },
    {
        id: 4,
        name: 'cust4',
        address: 'test2'
    },
    {
        id: 5,
        name: 'cust5',
        address: null
    }
];

Di asc/desc nilai null selalu diurutkan paling akhir. Adakah yang bisa membantu saya mengurutkan nilai null juga? Pindahkan semua nilai null ke atas saat asc/desc.

Jika kita mengganti nilai nol dengan kosong, penyortiran berfungsi seperti yang diharapkan. Tetapi kita tidak dapat mengubah data menjadi kosong karena nilai nol dan kosong diperlakukan secara berbeda.

Saya telah melihat banyak posting serupa tetapi semuanya membuat nilai nol untuk didorong di bawah seperti tautan di bawah ini.

Cara mengurutkan array dengan nilai nol

Tolong jangan tandai pertanyaan ini sebagai duplikat karena saya tidak dapat menemukan solusi yang tepat.

Solusi yang saya coba

 data.sort(function (item1, item2) {
    ------------------/////---not working------------------------------
if (item1[colBinding] === null && sort.direction === 'asc') return 1;
if (item2[colBinding] === null && sort.direction === 'asc') return 0;
if (item1[sort.colBinding] === null && sort.direction === 'desc') return 1;                if (item2[sort.colBinding] === null && sort.direction === 'desc') return -1;
if (sort.direction === 'asc') return item1[sort.colBinding] > item2[sort.colBinding];
if (sort.direction === 'desc') return item1[sort.colBinding] < item2[sort.colBinding]; 

-------------------------------------------------------
----------------------//working to push null at the end 
let currentData = item1[colBinding] === null ? '' : item1[sort.colBinding];
let nextData = item2[sort.colBinding] === null ? '' : item2[sort.colBinding];
if (currentData === nextData) { return -1 };
if (currentData < nextData) { return 0 };
if (currentData > nextData) { return 1 };
 ----------------------------------------------------------

---------------------/// not working-----------------------------------
var nullPosition = sort.direction === 'asc' ? 1 : -1;
if (item1[colBinding] === null) return nullPosition;
if (item2[colBinding] === null) return -nullPosition;
if (item1[colBinding] < item2[colBinding]) return -nullPosition;
if (item1[colBinding] > item2[colBinding]) return nullPosition;
return 0
------------------------------------------------------------------------------

                });
-5
Mothy 21 Agustus 2017, 10:53

2 jawaban

Jawaban Terbaik

Anda dapat memeriksa nilai untuk null terlebih dahulu dan mengurutkannya ke atas, lalu mengurutkannya berdasarkan nilainya.

var data = [{ id: 1, name: 'cust1', address: null }, { id: 2, name: 'cust2', address: 'test1' }, { id: 3, name: 'cust3', address: 'add2' }, { id: 4, name: 'cust4', address: 'test2' }, { id: 5, name: 'cust5', address: null }];

data.sort(function (a, b) {
    return (b.address === null) - (a.address === null) || ('' + a.address).localeCompare(b.address);
});

console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Untuk pengurutan menurun, cukup balikkan bagian kedua

var data = [{ id: 1, name: 'cust1', address: null }, { id: 2, name: 'cust2', address: 'test1' }, { id: 3, name: 'cust3', address: 'add2' }, { id: 4, name: 'cust4', address: 'test2' }, { id: 5, name: 'cust5', address: null }];

data.sort(function (a, b) {
    return (b.address === null) - (a.address === null) || ('' + b.address).localeCompare(a.address);
});

console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }
4
Nina Scholz 21 Agustus 2017, 08:03

Anda dapat menggunakan fungsi pengurutan khusus untuk mengurutkan larik dan menggunakan parameter untuk menentukan urutan pengurutan.

var data = [{ id: 1, name: 'cust1', address: null }, { id: 2, name: 'cust2', address: 'test1' }, { id: 3, name: 'cust3', address: 'add2' }, { id: 4, name: 'cust4', address: 'test2' }, { id: 5, name: 'cust5', address: null }];

var sortWithOrder = (data, order) => {
  let r = order === 'ASC' ? 1 : -1;
  return data.sort(function (a, b) {
  if(!a.address && !b.address)
    return 0;
  else if(!b.address && a.address)
    return 1;
  else if(!a.address && b.address)
    return -1;
  else
    return r * a.address.localeCompare(b.address);
  });
}

console.log(sortWithOrder(data, 'ASC'));
console.log(sortWithOrder(data, 'DESC'));
.as-console-wrapper { max-height: 100% !important; top: 0; }
0
Hassan Imam 21 Agustus 2017, 08:17