簡體   English   中英

Angular - Map Object 相同鍵的數組值

[英]Angular - Map Object array value to same key

我有一個這樣的 object,

const product = {
  name: 'watch',
  color: ['brown', 'white']
}

預期結果:

我需要將這個 object 壓平到 object 格式以下,

name: 'watch'
color: 'brown'
color: 'white'

要迭代產品 object,我必須使用另一個內部 for 循環,如下所示。 在迭代這個外部 for 循環之前,我需要像上面的預期結果一樣展平輸入產品 object。 這樣我就可以避免額外的內部 for 循環來迭代數組值。 如何簡化這個?

    for (const [key, val] of Object.entries(product)) {
      if (Array.isArray(val)) {
        if (val.length) {
          for (const v of val) {
            console.log('Array val key:' + key + ', val:' + v);
          }
        }
      } else {
        console.log('key:' + key + ', val:' + val);
      };
    }

我的 tsconfig.json 目標是 es2015(es6),lib 有 es2017(es8) 和 es2018(es9)。 不支持 es10 及以上功能。

我在這里看到 Dennis Ameling 的回答One liner to flatten nested object這與我的要求有些相同,但我不需要將數組鍵附加到父 object。

為什么我需要將這個數組值展平到同一個鍵?

我必須將這些鍵值推送到另一個數組,例如,

let data = [];
this.data.push(`productkey${index}=${key}_productval${index}=${val}`);

我將以這種格式推送到數據數組,

 productkey0=name_productval0=watch,
 productkey1=color_productval1=brown,
 productkey2=color_productval2=white,

現在有了上面的 for 循環,我必須在外部 for 循環和內部循環中使用 push 方法。 我想簡化這個。

我想縮短循環迭代代碼,這樣我就可以避免額外的內部 for 循環來迭代數組值

這是不可能的。 你有一個嵌套的數據結構,你需要嵌套循環來處理它。

但是,您可以刪除多余的val.length檢查,如果數組為空,循環體將不會運行。

for (const [key, val] of Object.entries(product)) {
  if (Array.isArray(val)) {
    for (const [i, v] of val.entries()) {
      console.log('Array val key:' + key + '['+i+'], val:' + v);
    }
  } else {
    console.log('key:' + key + ', val:' + val);
  };
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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