首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何展平不同对象的嵌套数组,但只从现有的属性名称中获取值?

展平不同对象的嵌套数组,但只从现有的属性名称中获取值,可以通过递归和迭代的方式来实现。以下是一个可能的解决方案:

  1. 首先,定义一个函数,接受两个参数:要展平的对象和一个可选的前缀参数。
  2. 在函数内部,创建一个空对象来存储展平后的结果。
  3. 使用递归遍历对象的属性,对于每个属性,判断其类型:
    • 如果属性是一个数组,使用迭代遍历数组的每个元素,并将前缀参数与数组索引拼接作为新的前缀传递给递归函数。
    • 如果属性是一个对象,使用递归调用函数,并将前缀参数与属性名称拼接作为新的前缀传递给递归函数。
    • 如果属性是一个基本类型(字符串、数字等),将其添加到结果对象中,属性名称由前缀参数与当前属性名称拼接而成。
  • 最后,返回展平后的结果对象。

以下是一个示例实现的代码:

代码语言:txt
复制
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;
}

使用示例:

代码语言:txt
复制
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);

输出结果:

代码语言:txt
复制
{
  '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'
}

这个解决方案可以展平任意嵌套层级的对象,并且只从现有的属性名称中获取值。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券