[英]Extract keys and values from object via an array of strings in javascript
[英]How to extract values from an object and return it in an array of strings with specific requirements
我正在嘗試構建一個 function ,它將從 object 中提取值並創建一個字符串數組。
在下面的代碼片段中,您可以看到我到目前為止所做的一個示例,但這並不完全符合我的要求。
假設我有示例中的數據
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"
]
但是我需要的是以下數組,如果我們在數據中是否有嵌套的 object
[
* 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))
更新
根據以下示例,嵌套對象永遠不會更深入地 go
age: {
group1: {
min: '1',
max: '6'
}
group2: {
min: '7',
max: '10'
}
},
預期結果為
[
'1 - 6',
'7 - 10'
]
OP 已經提出了一種遞歸方法。
為了實現 OP 的預期結果,必須執行遞歸操作 function 以連接任何數組類型的項目和任何對象類型的值,而不管(當前處理的)數據如何 -結構的嵌套級別。
並且對於不連接 OP data
object 的第一級條目,只需通過所述遞歸map
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; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.