javascript - 具有动态嵌套键的对象

标签 javascript

有一个数组

let arr = [
    ['one','apple','acid','Lorem1'],
    ['one','strawberry','sugar','Lorem2'],
    ['two','melon','water','Lorem3'],
    ['two','melon','sugar','Lorem4'],
    ['three','cow','meat','Lorem5'],
    ['three','peeg','meat','Lorem6']
];

有必要将其转换为以下对象:

   let obj = {
        one:{
            apple:{
                acid:{
                    title:'Lorem1'
                }
            },
            strawberry:{
                sugar:{
                    title:'Lorem2'
                }
            }
        },
        two:{
            melon:{
                water:{
                    title:'Lorem3'
                },
                sugar:{
                    title:'Lorem4'
                }
            }
        },
        three:{
            cow:{
                meat:{
                    title:'Lorem5'
                }
            },
            peeg:{
                meat:{
                    title:'Lorem6'


     }
        }
    }
}

我尝试过,但这个驱逐键未定义:

for( row = 1; row<arr.length; row++ ) {
    obj[arr[0]][arr[1]][arr[2]]={
        title:arr[3]
    };
}

但是由于事先未定义索引,因此会产生未定义的错误。

帮助找到正确的决定,脑海中只会浮现出“如果”的拐杖。

最佳答案

你的代码不起作用,因为当使用obj[attr]语法时,JavaScript不会自动创建空对象,你应该自己创建它。

let arr = [
    ['one','apple','acid','Lorem1'],
    ['one','strawberry','sugar','Lorem2'],
    ['two','melon','water','Lorem3'],
    ['two','melon','sugar','Lorem4'],
    ['three','cow','meat','Lorem5'],
];

let obj = {}

for(let attrs of arr){
  let current = obj;
  for(let i=0;i<attrs.length-1;++i){
    if(!current[attrs[i]])
      current[attrs[i]]={}
    current=current[attrs[i]]
  }
  current['title']=attrs[attrs.length-1]
}

console.log(obj)

关于javascript - 具有动态嵌套键的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52315419/

相关文章:

javascript - 无法从 Web(JavaScript) QuickBlox 发送推送通知

javascript - 动态决定for循环的顺序

javascript - 导入模块时 'as'是什么意思?

javascript - 如何在 JavaScript 中获取完全准确的值?

javascript - 将数据从mysql数据库导入到现有的html5表中

javascript - 如何使用 AJAX 从 jsp 中的 servlet 检索多个值

javascript - 我如何返回 eval(code) 并使用 JavaScript 取回对象?

javascript - After Effects 对象模型是否可用于在 Adob​​e ExtendScript Toolkit 之外进行测试?

javascript - 变量可以等于 if 语句中的两个东西吗?

javascript - 大小改变 &lt;input&gt;