想用JavaScript在每个嵌套对象中添加新键值

wtzytmuj  于 2023-04-10  发布在  Java
关注(0)|答案(2)|浏览(146)

我有一个嵌套的JavaScript对象,我想在每个嵌套对象中添加新的键值。所以基本上我必须创建自定义函数来添加它。

我的输入对象:

const obj = {
    name: {
        final: {
            val: 'yes'
        }
    }
}

预期对象:

const outObj = {
    id: 1,
    name: {
        id: 1,
        final: {
            id: 1,
            val: 'yes'
        }
    }
}
kmbjn2e3

kmbjn2e31#

解决方法是基本的递归,你找出对象的任何属性是否是一个对象,然后循环遍历它,以此类推。

const obj = {
  name: {
    final: {
      val: 'yes'
    }
  }
}

const obj2 = {
  name: {
    final: {
      val: 'yes',
      age: 22,
      address: {
        city: 'Noida',
        age: 23
      }
    },
    age: 18
  },
  age: 20
}

const addKey = (obj, key, value) => {
  Object.values(obj).forEach(val => {
    if (val && typeof val === 'object') addKey(val, key, value);
  });
  obj[key] = value;
}

addKey(obj, 'id', 1);
addKey(obj2, 'id', 2);

console.log(obj);
console.log(obj2);
eqqqjvef

eqqqjvef2#

你可以递归函数和reduce来得到输出:

const obj = {
  name: {
    final: {
      val: 'yes'
    }
  }
};
const addId = (obj, id = 1) => Object.entries(obj).reduce((acc, [key, val]) => {
    acc.id = id;
    acc[key] = (typeof val === 'object' && val !== null) ? addId(val, id ) : val;
    return acc;
}, {});


const outObj = addId(obj);

console.log(outObj)

相关问题