【问题标题】:How to change object keys in deeply nested object with lodash?如何使用 lodash 更改深度嵌套对象中的对象键?
【发布时间】:2016-08-24 12:33:31
【问题描述】:

我有以下一种对象:

{
  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 一样工作但会遍历深层嵌套对象的函数。

【问题讨论】:

  • 它可以出现在任何深度吗?
  • @alex 是的,带有这些键值对的对象的选项数组可以并且将出现在任何深度。

标签: javascript lodash


【解决方案1】:

你可以使用_.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>

【讨论】:

  • 循环对象失败:/
猜你喜欢
  • 1970-01-01
  • 2016-05-05
  • 2019-03-15
  • 1970-01-01
  • 2020-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多