我有 PriorityArray 作為
[1, 2, 3]
和回應json為
[ {
Id: 1,
Name:”aaa”,
Priority:1
},
{
Id: 2,
Name:”bbb”,
Priority:1
},
{
Id: 3,
Name:”ssss”,
Priority:2
},
{
Id: 4,
Name:”aaa”,
Priority:2
},
{
Id: 5,
Name:”dddd”,
Priority:1
},
{
Id: 6,
Name:”dddd”,
Priority:3
}]
我想根據旋轉優先級排列所有物件。產品應排列在像 1,2,3 這樣的陣列中,然后再次附加優先級為 1,2,3 的下一個產品
預期輸出:
[ {
Id: 1,
Name:”aaa”,
Priority:1
},
{
Id: 3,
Name:”ssss”,
Priority:2
},
{
Id: 6,
Name:”dddd”,
Priority:3
}
{
Id: 2,
Name:”bbb”,
Priority:1
},
{
Id: 4,
Name:”aaa”,
Priority:2
},
{
Id: 5,
Name:”dddd”,
Priority:1
},
]
uj5u.com熱心網友回復:
很快添加一個解釋,直到那時你可以通過解決方案
const priority = [1, 2, 3];
const res = [
{ Id: 1, Name: "aaa", Priority: 1 },
{ Id: 2, Name: "bbb", Priority: 1 },
{ Id: 3, Name: "ssss", Priority: 2 },
{ Id: 4, Name: "aaa", Priority: 2 },
{ Id: 5, Name: "dddd", Priority: 1 },
{ Id: 6, Name: "dddd", Priority: 3 },
];
const ps = priority.map((p) => res.filter((r) => r.Priority === p));
let index = 0;
let maxIndex = Math.max(...ps.map((p) => p.length));
let final = [];
while (index < maxIndex) {
ps.forEach((p) => {
if (p[index]) {
final.push(p[index]);
}
});
index = 1;
}
console.log(final);
uj5u.com熱心網友回復:
您可以為索引獲取一個物件并創建一個新陣列并對其進行過濾。
const
order = [1, 2, 3],
data = [{ Id: 1, Name: 'aaa', Priority: 1 }, { Id: 2, Name: 'bbb', Priority: 1 }, { Id: 3, Name: 'ssss', Priority: 2 }, { Id: 4, Name: 'aaa', Priority: 2 }, { Id: 5, Name: 'dddd', Priority: 1 }, { Id: 6, Name: 'dddd', Priority: 3 }],
indices = Object.fromEntries(order.map((k, v) => [k, v])),
result = data
.reduce((r, o) => {
r[indices[o.Priority]] = o;
indices[o.Priority] = order.length;
return r;
}, [])
.filter(Boolean);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
uj5u.com熱心網友回復:
這是我想出的,它相當粗糙,但效果很好。
const testList = [
{Id: 1,Name:'aaa',Priority:1},
{Id: 2,Name:'bbb',Priority:1},
{Id: 3,Name:'ssss',Priority:2},
{Id: 4,Name:'aaa',Priority:2},
{Id: 5,Name:'dddd',Priority:1},
{Id: 6,Name:'dddd',Priority:3}];
function prioritySort(arr, priority){
arr = arr.slice(); //copies the array
let result = [];
let p = priority[0];
let c = 0;
while(arr.length > 0 || c > 10000){
c ;
for(let curr in arr){
if(arr[curr].Priority == p){
result.push(arr[curr]);
arr.splice(curr, 1);
break;
}
}
if(c==priority.length){p=priority[0];c=0}else{p=priority[c]}
}
return result;
}
console.log(prioritySort(testList, [1, 2, 3]));
uj5u.com熱心網友回復:
您可以簡單地按優先級對陣列進行排序。
yourArray.sort((a, b) => a.Priority>b.Priority?1:-1);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/463861.html
標籤:javascript 节点.js 数组 打字稿 排序
