我有一个这样的对象
const product = {
name: 'watch',
color: ['brown', 'white']
}
预期结果:
我需要将这个对象平展到低于对象格式
name: 'watch'
color: 'brown'
color: 'white'
要迭代product对象,我必须使用另一个内部for循环,如下所示。在迭代这个外部for循环之前,我需要像上面预期的结果那样平化输入product对象。这样我就可以避免额外的内部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回答这里一个行来平铺嵌套对象,这与我的要求有些相同,但我不需要将数组键附加到父对象。
为什么我需要平化这个数组值到相同的键?
我必须将这些键值压入另一个数组,比如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);
};
}