簡體   English   中英

基於鍵值對 JavaScript 數組進行排序

[英]Sort JavaScript Array based on Key Value

我有一組狀態為“通過”和“失敗”的對象。 我想將所有失敗的都移到頂部,而將所有的通過在底部。 有沒有任何數組方法可以做同樣的事情?

let a = [
  { name: 'x'  , status: 'Pass' },
  { name: 'x1' , status: 'Fail' },
  { name: 'x2' , status: 'Pass' },
  { name: 'x3' , status: 'Fail' }
];

所需的輸出是

a = [
  { name: 'x1' , status: 'Fail' },
  { name: 'x3' , status: 'Fail' },
  { name: 'x'  , status: 'Pass' },
  { name: 'x3' , status: 'Pass' }
];

此任務的慣用解決方案:

[...a.filter(el=>el.status==='Fail'),...a.filter(el=>el.status==='Pass')]

但是,我覺得@farooq 的解決方案是這里最好的

如果您只是按字典順序排序,只需使用localeCompare ,並對狀態和名稱比較值進行邏輯或。

 let data = [ { name: 'x' , status: 'Pass' }, { name: 'x1' , status: 'Fail' }, { name: 'x2' , status: 'Pass' }, { name: 'x3' , status: 'Fail' } ]; const sorted = data.sort( ({ name: n1, status: s1 }, { name: n2, status: s2 }) => s1.localeCompare(s2) || n1.localeCompare(n2)) console.log(sorted);
 .as-console-wrapper { top: 0; max-height: 100% !important; }

    let failed = []
    let passed = []
       for(let i = 0; i < values.length; i++){ 
         if(values[i].pass){
            passed.push(values[i])
         else {
            failed.push(values[i])
          }
       }
values = []
values.push(...failed)
values.push(...passed)

您可以使用Array.sort函數對對象數組進行排序。 代碼 :

 let a = [ { name: "x", status: "Pass", }, { name: "x1", status: "Fail", }, { name: "x2", status: "Pass", }, { name: "x3", status: "Fail", }, ]; a.sort(function (a, b) { var keyA = a.status, keyB = b.status; // Compare the 2 values if (keyA < keyB) return -1; if (keyA > keyB) return 1; return 0; }); console.log(a);

使用 Ascii 值,您也可以對數組進行排序

a.sort((a, b) => {
  return a.status > b.status ? 1 : a.status < b.status ? -1 : 0;
});

這是您可以使用Array#sortString#localeCompare方法執行此操作的一種方法。

 const a = [ { name: 'x', status: 'Pass' }, { name: 'x1', status: 'Fail' }, { name: 'x2', status: 'Pass' }, { name: 'x3', status: 'Fail' } ], output = a.sort( ({status:x},{status:y}) => x.localeCompare(y) ); console.log( output );

您可以將Array.sort()String.localeCompare() ) 結合使用,如下所示:

 let a = [ { name: 'x' , status: 'Pass' }, { name: 'x1' , status: 'Fail' }, { name: 'x2' , status: 'Pass' }, { name: 'x3' , status: 'Fail' } ]; const result = a.sort((o1, o2) => o1.status.localeCompare(o2.status)); console.log(result)

你也可以使用 forEach

let failed = []
let passed = []
values = [
  { name: 'x'  , status: 'Pass' },
  { name: 'x1' , status: 'Fail' },
  { name: 'x2' , status: 'Pass' },
  { name: 'x3' , status: 'Fail' }
]

values.forEach((e) => {
  if (e.status === 'Pass') {
    passed.push(e)
    return
  }
  failed.push(e)
})

values = []
values.push(...failed)
values.push(...passed)

我想用這種方式,使用非常簡單的 Javascript 函數unshiftpush ,廣泛兼容各種瀏覽器。

 let a = [ { name: 'x' , status: 'Pass' }, { name: 'x1' , status: 'Fail' }, { name: 'x2' , status: 'Pass' }, { name: 'x3' , status: 'Fail' } ]; let b = []; for(var x in a ) { if(a[x].status == 'Fail') { b.unshift(a[x]); } else { b.push(a[x]); } } console.log(b);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM