展平不同对象的嵌套数组,但只从现有的属性名称中获取值,可以通过递归和迭代的方式来实现。以下是一个可能的解决方案:
以下是一个示例实现的代码:
function flattenObject(obj, prefix = '') {
let result = {};
for (let key in obj) {
if (Array.isArray(obj[key])) {
obj[key].forEach((item, index) => {
const newPrefix = prefix + key + '[' + index + '].';
Object.assign(result, flattenObject(item, newPrefix));
});
} else if (typeof obj[key] === 'object' && obj[key] !== null) {
const newPrefix = prefix + key + '.';
Object.assign(result, flattenObject(obj[key], newPrefix));
} else {
result[prefix + key] = obj[key];
}
}
return result;
}
使用示例:
const nestedObj = {
name: 'John',
age: 30,
address: {
street: '123 Main St',
city: 'New York',
state: 'NY',
zip: '10001'
},
hobbies: ['reading', 'painting', 'coding']
};
const flattenedObj = flattenObject(nestedObj);
console.log(flattenedObj);
输出结果:
{
'name': 'John',
'age': 30,
'address.street': '123 Main St',
'address.city': 'New York',
'address.state': 'NY',
'address.zip': '10001',
'hobbies[0]': 'reading',
'hobbies[1]': 'painting',
'hobbies[2]': 'coding'
}
这个解决方案可以展平任意嵌套层级的对象,并且只从现有的属性名称中获取值。
领取专属 10元无门槛券
手把手带您无忧上云