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