我正在嘗試構建一個函式,該函式將從物件中提取值并創建一個字串陣列。
在下面的代碼片段中,您可以看到我到目前為止所做的一個示例,但這并不完全符合我的要求。
假設我有示例中的資料
const data = {
age: {
min: '17',
max: '66'
},
gender: ['male', 'female'],
rosacea: 'true',
rosacea_papulo_pustulosa: 'true',
severe_rosacea: 'true',
nurse_contact: 'true',
};
現在我正在為每個單個值獲取一個字串陣列,實際上如果你運行它的結果是
[
"17",
"66",
"male",
"female",
"true",
"true",
"true",
"true"
]
但是我需要的是以下陣列,如果我們在資料中是否有嵌套物件
[
* This is the result of age min: '17' and max: '66'
"17 - 66",
* This is the result of gender male and female
"male - female",
* The rest is ok as no nested objects
"true",
"true",
"true",
"true"
]
上面的結果是我正在搜索的
另一個例子如下資料
{disease":{"valid":["MDD","PTSD"],"invalid":["None"]}}
// result expected
[
"MDD - PTSD",
"None"
]
我目前的問題是如何進入預期結果加上需要-在匯總結果之間。
我們也可能遇到資料看起來像這樣的情況
{ageGroup: ["1","2","3", ..., "n"]}
// result expected
[
"1 - 2 - 3 ... etc ..."
]
片段緊貼我的第一次嘗試
const data = {
age: {
min: '17',
max: '66'
},
gender: ['male', 'female'],
rosacea: 'true',
rosacea_papulo_pustulosa: 'true',
severe_rosacea: 'true',
nurse_contact: 'true',
};
const getValues = (data, values = []) => {
if (typeof data !== 'object') {
return [...values, data];
}
return Object.values(data).flatMap((v) => getValues(v, values));
};
console.log(getValues(data))
更新
根據以下示例,嵌套物件永遠不會更深入
age: {
group1: {
min: '1',
max: '6'
}
group2: {
min: '7',
max: '10'
}
},
預期結果為
[
'1 - 6',
'7 - 10'
]
uj5u.com熱心網友回復:
OP 已經提出了一種遞回方法。
為了實作 OP 的預期結果,必須以一種將任何陣列型別的項和任何物件型別的值連接起來的方式實作遞回操作函式,而不管(當前處理的)資料如何 -結構的嵌套級別。
并且對于不被連接的OPdata物件的第一級條目,只需通過所述遞回函式連接到map該物件。values
function stringifyDataRecursively(data) {
let result = '';
if (data && (typeof data === 'object')) {
if (Array.isArray(data)) {
result = data
.map(stringifyDataRecursively)
.join(' - ');
} else {
result = Object
.values(data)
.map(stringifyDataRecursively)
.join(' - ');
}
} else {
result = data;
}
return result;
}
const sampleData = {
age: {
min: '17',
max: '66'
},
gender: ['male', 'female'],
rosacea: 'true',
rosacea_papulo_pustulosa: 'true',
severe_rosacea: 'true',
nurse_contact: 'true',
};
console.log(
'stringified `sampleData` ...',
Object
.values(sampleData)
.map(stringifyDataRecursively)
);
const sampleData_2 = {
disease: {
valid: ['MDD', 'PTSD'],
invalid: ['None'],
},
};
console.log(
'stringified `sampleData_2` ...',
Object
.values(sampleData_2)
.map(stringifyDataRecursively)
);
console.log(
'stringified `sampleData_2.disease` ...',
Object
.values(sampleData_2.disease)
.map(stringifyDataRecursively)
);
const sampleData_3 = {
group1: {
min: '1',
max: '6',
},
group2: {
min: '7',
max: '10',
},
};
console.log(
'stringified `sampleData_3` ...',
Object
.values(sampleData_3)
.map(stringifyDataRecursively)
);
.as-console-wrapper { min-height: 100%!important; top: 0; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/507844.html
標籤:javascript 数组 递归 数据结构
上一篇:通過其父級修改嵌套的字典鍵名
