javascript - 如何使用 lodash 更改深层嵌套对象中的对象键?

标签 javascript lodash

我有以下类型的对象:

{
  options: [
    { id: 1, value: 'a' }
  ],
  nestedObj: {
    options: [
      { id: 2, value: 'b' }
    ]
  }
}

如何更改第一级和嵌套级选项数组中的键“id”?我尝试为此使用 lodash,但未能获得所需的结果:

{
  options: [
    { newKey: 1, value: 'a'
  ],
  nestedObj: {
    options: [
      { newKey: 2, value: 'b' }
    ]
  }
}

所以我想找到一个类似lodash mapKeys 的函数但会遍历深层嵌套对象。

最佳答案

您可以使用 _.transform()递归地替换键:

var obj = {
  options: [{
    id: 1,
    value: 'a'
  }],
  nestedObj: {
    options: [{
      id: 2,
      value: 'b'
    }]
  }
};

console.log(replaceKeysDeep(obj, {
  id: 'newKey',
  options: 'items'
}));

function replaceKeysDeep(obj, keysMap) { // keysMap = { oldKey1: newKey1, oldKey2: newKey2, etc...
  return _.transform(obj, function(result, value, key) { // transform to a new object

    var currentKey = keysMap[key] || key; // if the key is in keysMap use the replacement, if not use the original key

    result[currentKey] = _.isObject(value) ? replaceKeysDeep(value, keysMap) : value; // if the key is an object run it through the inner function - replaceKeys
  });
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.js"></script>

关于javascript - 如何使用 lodash 更改深层嵌套对象中的对象键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39123461/

相关文章:

javascript - w3widgets 响应式日历 动态加载事件

javascript - 如何使用express-validator获取验证错误?

javascript - 从vuejs中的方法设置数据

javascript - 获取对象中的第一个字符串 javascript lodash

javascript - lodash 检查对象属性是否有值

javascript - 如何向 ES6 javascript 类添加 mixins?

javascript - Angular 2 @View with template vs @Component with template

javascript - 如何在 Flexbox 行之间插入 div 并使所有内容保持响应?

javascript - 如何用 lodash 比较两个对象并返回新对象?

javascript - 搜索栏功能错误 IONIC 3