js或es6 对象动态层级嵌入属性

有以下的简单对象

numbers:{
    one:'one',
    two:'two',
    three:'htree',
    fourth:'fourth'
}

我想通过判断存在的形式依次转为下面的代码

if(numbers.fourth){
    let num = {
        [fourth]:{
            [three]:{
                [two]:{
                    [one]:'ok'
                }
            }
        }
    }
}else if(numbers.three){
    let num = {
        [three]:{
            [two]:{
                [one]:'ok'
            }
        }
    }
}else if(numbers.two){
    ...
    这里就不写了,一样的参数
}

numbers对象里的属性是可变的,所以需要动态判断并生成相应结构的对象,怎么实现好点(尽量减少代码量)?
求各位路过的大神么,及热心吃瓜群众们!!!

阅读 4.5k
1 个回答

属性个数可变 属性名不变
如以下代码:

var numbers = {
  one: 'one',
  two: 'two',
  three: 'three',
  fourth: 'fourth'
}

function structuring(arr) {
  var keys = ['fourth', 'three', 'two', 'one']
  var rtn = {}
  keys.forEach((key, index) => {
    if (arr[key] && !Object.keys(rtn).length) {
      for (var i = keys.length - 1; i >= index; i--) {
        var rtnKey = '[' + keys[i] + ']'
        if (i === keys.length - 1) {
          rtn[rtnKey] = 'OK'
        } else {
          var tmp = {}
          tmp[rtnKey] = rtn
          rtn = tmp
        }
      }
    }
  })
  return rtn
}

console.log(structuring(numbers))
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏