Javascript 将带有数组字符串键的对象转换为键/名称值的

标签 javascript

我有一个带有这样命名键的对象

{ 
 'name[first]': 'john',
 'name[last]': 'doe'
 }

我想转换成:

{ 
 'name' : {
     'first' : 'john',
     'last' : 'doe'
   }
 }

有什么好的方法可以做到这一点吗?

最佳答案

您可以使用reduce()返回obj和正则表达式来分割键。

var obj = {
  'name[first]': 'john',
  'name[last]': 'doe'
}

var result = Object.keys(obj).reduce(function(r, e) {
  var key = e.split(/\[(.*?)\]/)
  if (!r[key[0]]) r[key[0]] = {}
  r[key[0]][key[1]] = obj[e]
  return r;
}, {})

console.log(result)

对于嵌套的键结构,您可以再次使用 reduce,但使用不同的键方法,但随后您会遇到对象的深度合并问题,为此您可以使用 lodash。

var obj = {
  'name[first[foo]]': 'john',
  'name[last]': 'doe',
  'name[last[foo[bar]]]': 'doe'
}

var result = Object.keys(obj).reduce(function(r, e) {
  var key = e.replace(/\[/g, '.').replace(/\]/g, '').split('.')
  var o = {}

  key.reduce(function(re, el, i) {
    return i != key.length - 1 ? re[el] = {} : re[el] = obj[e]
  }, o)

  r = _.merge(r, o)
  return r;
}, {})

console.log(JSON.stringify(result, 0, 4))
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>

关于Javascript 将带有数组字符串键的对象转换为键/名称值的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41900392/

相关文章:

javascript - 将 ID(Index) 传递给 onEditDetail() 参数

javascript - 如果内容高于视口(viewport),则 100vh 有回退?

javascript - href onclick 在 Windows Phone cordova 应用程序中不起作用

javascript - getJSON 覆盖 HTML 背景颜色

javascript - Android 如何将值写入 HTML5 localstorage?

javascript - 自定义 HTML 元素属性未显示 - Web 组件

javascript - 提交后禁用 Ajax 按钮

javascript - 是否最好避免为 Ajax 响应直接返回 HTML?

javascript - 带有动态部分的动画 Canvas

javascript - 通知用户数据库更改? JavaScript/ Ajax