我有一組狀態為“通過”和“失敗”的物件。我想將所有失敗的都移到頂部,而將所有的通過在底部。有沒有任何陣列方法可以做同樣的事情?
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' }
];
uj5u.com熱心網友回復:
此任務的慣用解決方案:
[...a.filter(el=>el.status==='Fail'),...a.filter(el=>el.status==='Pass')]
但是,我覺得@farooq 的解決方案是這里最好的
uj5u.com熱心網友回復:
如果您只是按字典順序排序,只需使用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; }
uj5u.com熱心網友回復:
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)
uj5u.com熱心網友回復:
您可以使用 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);
uj5u.com熱心網友回復:
使用 Ascii 值,您也可以對陣列進行排序
a.sort((a, b) => {
return a.status > b.status ? 1 : a.status < b.status ? -1 : 0;
});
uj5u.com熱心網友回復:
您可以使用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)
uj5u.com熱心網友回復:
你也可以使用 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)
uj5u.com熱心網友回復:
這是您可以使用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 );
uj5u.com熱心網友回復:
我想使用這種方式,使用非常簡單的 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);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/481239.html
標籤:javascript 数组 json 有角度的
上一篇:在物件陣列中映射物件陣列
