js 这种[{a:1},{a:{b:1}}]二层对象如何处理成一层,有没有不使用递归的方法
时间: 2023-11-01 09:24:55 浏览: 34
您可以使用 `Object.assign()` 方法和 `Array.prototype.map()` 方法来处理这个问题,而无需使用递归。以下是一个示例代码:
```
var arr = [{a:1}, {a:{b:1}}];
var flattened = Object.assign({}, ...arr.map(item => {
return Object.keys(item).reduce((acc, key) => {
if (typeof item[key] === 'object' && item[key] !== null) {
Object.assign(acc, item[key]);
} else {
acc[key] = item[key];
}
return acc;
}, {});
}));
console.log(flattened); // 输出:{ a: { b: 1 }, "0": { a: 1 } }
```
在这个代码中,我们首先使用 `Array.prototype.map()` 方法将每个对象映射成一个新的对象。在每个新对象中,我们使用 `Object.keys()` 方法获取对象的所有键,然后使用 `Array.prototype.reduce()` 方法将它们转换为一个新的对象。在每个 reduce 回调中,我们检查当前键值对的值是否为对象,如果是,我们就使用 `Object.assign()` 方法将其合并到新对象中,否则我们就将键值对添加到新对象中。最终,我们使用 `Object.assign()` 方法将所有新对象合并为一个扁平化的对象,并将其存储在 `flattened` 变量中。