我有一個myArray以物件為元素的陣列。我想要實作的是重構陣列元素的位置,而不是讓兩個具有相同鍵的物件彼此相鄰。我現在使用的方法開始起作用,但在進行到一半后就搞砸了。我怎樣才能做到這一點?提前致謝。
我想要實作的目標:finalArray = [{ "morning": "..." }, { "evening": "..." }, { "morning": "..." }, { "evening ": "..." }, { "morning": "..." }, { "evening": "..." }, { "morning": "..." }, { "evening": "..." }, { "晚上": "..." }, { "晚上": "..." }]
const myArray = [{
"morning": "23_6557"
}, {
"evening": "7665_908"
}, {
"evening": "545_787"
}, {
"evening": "8774_957"
}, {
"morning": "434_6447"
}, {
"morning": "775_67"
}, {
"evening": "4554_8774"
}, {
"evening": "224_74"
}, {
"evening": "43_112"
}, {
"morning": "32_47"
}]
orderedArray = []
unOrderedArray = []
myArray.forEach((obj) => {
//if the orderedArray is empty push a random array to it
if (orderedArray.length == 0) {
orderedArray.push(obj)
}
Object.keys(obj).forEach((key) => {
//get the last element in the orderedArray and check if its key is equal to the new obj key
if (Object.keys(orderedArray.at(-1))[0] != key) {
//get a random object from myArray with key not equal to last orderedArray object key and push it to orderedArray
orderedArray.push(obj)
} else {
//get a random object from myArray with key equal to last orderedArray object key and push it to unOrderedArray
unOrderedArray.push(obj)
}
});
});
const finalArray = orderedArray.concat(unOrderedArray)
console.log(finalArray)
uj5u.com熱心網友回復:
一種方法是首先按屬性對資料進行分組,然后在組之間交替提取元素:
const myArray = [{"morning": "23_6557"}, {"evening": "7665_908"}, {"evening": "545_787"}, {"evening": "8774_957"}, {"morning": "434_6447"}, {"morning": "775_67"}, {"evening": "4554_8774"}, {"evening": "224_74"}, {"evening": "43_112"}, {"morning": "32_47"}];
// Create a map keyed by the properties
const map = new Map(myArray.map(o => [Object.keys(o)[0], []]));
// Populate the arrays that are associated by those properties
for (const o of myArray) map.get(Object.keys(o)[0]).push(o);
// Extract the arrays from this map
const groups = [...map.values()];
// Alternate between the groups to pull objects from them
const result = [];
while (groups.length) {
const group = groups.shift();
result.push(group.shift());
if (group.length) groups.push(group);
}
console.log(result);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/497983.html
標籤:javascript 节点.js
上一篇:我可以將[SomeType]快速傳遞給“paramName:SomeType=[]”什么?
下一篇:在CSS影片期間防止影像翻轉
