簡體   English   中英

如何從 object 中提取值並將其返回到具有特定要求的字符串數組中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM