[英]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#sort
和String#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 函數unshift
和push
,廣泛兼容各種瀏覽器。
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.