为了账号安全,请及时绑定邮箱和手机立即绑定

如何替换javascript中嵌套对象的所有键

如何替换javascript中嵌套对象的所有键

暮色呼如 2024-01-18 14:33:19
  function renameKeys(obj, newKeys) {        const keyValues = Object.keys(obj).map((key) => {          let newKey = key + "1";          if (Array.isArray(obj[key]) == false) {            renameKeys(obj[key], newKeys);          }          console.log(newKey, "]", obj[key]);          return {            [newKey]: obj[key],          };        });        return Object.assign({}, ...keyValues);      }      test = JSON.parse(        '{"verifying_explanation":               {"bus_stop":["1234"],                "elementary_school":["1234"],                "middle_school":["1234"],                "high_school":["1234"]               }         }'      );      console.log(test);      data = renameKeys(test, this);      console.log(data);看起来所有按键的功能都改变了,但并没有应用。我认为是因为复制主体。我不知道如何操作按键。我想替换所有键,以便在代码中应用 i18n。所以新的密钥将类似于let newKey = i18n.$t(key); 此短代码仅用于测试代码。请给我一些想法来解决这个问题。
查看完整描述

2 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

您需要定义函数来创建新函数key value pairs,然后object从这些函数中形成一个函数。另外,检查该值是否为object, 以递归地重命名嵌套对象 -


function renameKeys(obj) {

  const keyValues = Object.entries(obj).map(([key, value]) => {

    let newKey = key + "1";

    if (typeof value === 'object' && value !== null && !Array.isArray(value)) {

      value = renameKeys(value);

    }

    return [newKey, value];    

  });

  return Object.fromEntries(keyValues);

}


test = JSON.parse(

'{"verifying_explanation": {"bus_stop": ["1234"],"elementary_school": ["1234"],"middle_school": ["1234"],"high_school": ["1234"]}}'

);

console.log(test);

data = renameKeys(test, this);

console.log(data);


查看完整回答
反对 回复 2024-01-18
?
倚天杖

TA贡献1828条经验 获得超3个赞

您无法在函数中返回新的键值对,相反,您只需向 obj 添加新键并删除旧键即可。


function renameKeys(obj, newKeys) {

        Object.keys(obj).map((key) => {

          let newKey = key + "1";

          if (Array.isArray(obj[key]) == false) {

            renameKeys(obj[key], newKeys);

          }

          // console.log(newKey, "]", obj[key]);

          obj[newKey]=obj[key];

          delete obj[key];

        });

      }


      test = JSON.parse(

        `{"verifying_explanation":

               {"bus_stop":["1234"],

                "elementary_school":["1234"],

                "middle_school":["1234"],

                "high_school":["1234"]

               }

         }`

      );

      

      console.log(test);

      data = renameKeys(test, this);

      console.log(test);


查看完整回答
反对 回复 2024-01-18
  • 2 回答
  • 0 关注
  • 108 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信