{
Type: "Fire",
Name: "Shark",
StartRange0: "10",
EndRange0: "20",
StartRange1: "30",
EndRange1: "40",
StartRange2: "60",
EndRange2: "70"
}
在上述物件中,StartRange 和 EndRange 可以是不同物件中的更多項。即這些值是從回圈中獲得的(StartRange index),所以可能有 StartRange1,2,3... lly, EndRange1,2,3...
上述物件結構必須更改為,
{
"Fire":{
"Name":"Shark",
"List":[
[
"10",
"20"
],
[
"30",
"40"
],
[
"60",
"70"
]
]
}
}
物件內部的 List 陣列是 [StartRange0,EndRange0],[StartRange1,EndRange2]... 的組合... 以此類推...
我試過了,
let newObj = {}
newObj[oldObj.Type] = {
Name: oldObj.Name, //oldObj is the first object defined above.
List: [[oldObj.StartRange0,oldObj.EndRange0],[oldObj.tartRange1,oldObj.EndRange1],[oldObj.StartRange2,oldObj.EndRange2]]
}
但在這里,它僅限于 StartRange2 和 EndRange2,但我需要 StartRangeN 和 EndRangeN。
uj5u.com熱心網友回復:
您可以從物件中的所有鍵中提取數字后綴,對它們進行排序,然后構建匹配和值StartRange*的陣列。StartRangeEndRange
const oldObj = {
Type: "Fire",
Name: "Shark",
StartRange0: "10",
EndRange0: "20",
StartRange1: "30",
EndRange1: "40",
StartRange2: "60",
EndRange2: "70",
};
// Extract Type, Name and the rest
const { Type, Name, ...ranges } = oldObj;
// A regex to match "StartRange*" keys and extract suffixes
const startRangeRx = /^StartRange(\d )$/;
const newObj = {
[Type]: {
Name,
List: Object.keys(ranges)
.reduce((keys, k) => {
// Extract suffixes as numbers
const suffix = k.match(startRangeRx)?.[1];
if (suffix !== undefined && `EndRange${suffix}` in ranges) {
return [...keys, Number(suffix)];
}
return keys;
}, [])
.sort() // sort
.map((suffix) => {
return [ranges[`StartRange${suffix}`], ranges[`EndRange${suffix}`]];
}),
},
};
console.log(newObj);
.as-console-wrapper { max-height: 100% !important; }
uj5u.com熱心網友回復:
你可以玩這個例子
const object = {
Type: "Fire",
Name: "Shark",
StartRange0: "10",
EndRange0: "20",
StartRange1: "30",
EndRange1: "40",
StartRange2: "60",
EndRange2: "70"
};
let index = 0;
let isFinished = false;
const results = [];
while (!isFinished) {
const startKey = `StartRange${index}`;
const endKey = `EndRange${index}`;
isFinished = !object.hasOwnProperty(startKey) || !object.hasOwnProperty(endKey);
!isFinished && results.push([object[startKey], object[endKey]]);
index ;
}
console.log(results);
uj5u.com熱心網友回復:
這就是我做地圖的方式
const input = {
Type: "Fire",
Name: "Shark",
StartRange0: "10",
EndRange0: "20",
StartRange1: "30",
EndRange1: "40",
StartRange2: "60",
EndRange2: "70"
}
const toList = (l) => Array.from({
length: Object.keys(l).length / 2
}, (_, N) => [l[`StartRange${N}`], l[`EndRange${N}`]])
const toOutput = ({ Type, Name, ...rest }) => {
const List = toList(rest)
return ({
[Type]: {
Name,
List
}
})
}
const output = toOutput(input)
console.log(output)
uj5u.com熱心網友回復:
這可能有效,但如果您可以更改該結構并使用另一個結構會更好。
const test = {
Type: "Fire",
Name: "Shark",
StartRange0: "10",
EndRange0: "20",
StartRange1: "30",
EndRange1: "40",
StartRange2: "60",
EndRange2: "70",
};
const format = (obj) => {
const { Type, Name, ...rest } = obj;
const list = [];
const keys = Object.keys(rest);
for (let index = 0; index < keys.length; index ) {
const start = rest[`StartRange${index}`];
const end = rest[`EndRange${index}`];
if (start && end) {
list.push([start, end]);
} else {
break; // assuming you don't have any other elements
}
}
return {
[Type]: {
Name,
List: list,
},
};
};
console.log(JSON.stringify(format(test)));
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/492148.html
標籤:javascript 目的
