javascript-创建嵌套数据时“找不到未定义的属性名称”
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-创建嵌套数据时“找不到未定义的属性名称”,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2134字,纯文字阅读大概需要4分钟。
内容图文
![javascript-创建嵌套数据时“找不到未定义的属性名称”](/upload/InfoBanner/zyjiaocheng/650/4567c0a3d1c04ab881977651ca01747d.jpg)
我正在尝试使用现有数据集创建嵌套树对象.
原始数据集为:
var raw_data = [
["A1", "B1", "C1", 1],
["A1", "B1", "C2", 2],
["A1", "B2", "C1", 3],
["A1", "B2", "C1", 4],
["A1", "B2", "C2", 5],
["A1", "B2", "C2", 6],
["A2", "B1", "C1", 7],
["A2", "B1", "C1", 8],
["A2", "B1", "C2", 9],
["A2", "B1", "C2", 10],
["A2", "B2", "C1", 11],
["A2", "B2", "C1", 12],
["A2", "B2", "C2", 13],
["A2", "B2", "C2", 14]
];
我希望我的最终数据如下所示:
{'A1':
{'B1': {'C2': 2, 'C1': 1},
'B2': {'C2': 6, 'C1': 4}
},
'A2':
{'B1': {'C2': 10, 'C1': 8},
'B2': {'C2': 14, 'C1': 12}
}
}
到目前为止,这是我的进度.
var obj = {};
for(i = 0; i< raw_data.length; i++) {
var [x,y,z,value] = raw_data[i];
obj[x][y][z] = value;
}
我遍历数据并在空数据上递归运行属性值.
例如:在第一次迭代中,我将obj [‘A1’] [‘B1’] [‘C1’] = 1设置为1.
但是,这会引起问题,因为第一个递归(obj [‘A1’])将返回undefined,因此出现以下错误:
"TypeError: Cannot set property 'B1' of undefined
为了解决这个问题,我尝试使用ES6这样的代理对象,而不是var obj = {}:
var obj = new Proxy({}, {
get: function(target, name) {
if (!(name in target)) {
console.log("Non-existant property '" + name + "'");
var val = target[name] = typeof(target); //Returning reference to already created object
return val;
}
}
});
但是,现在返回以下错误:
“ TypeError:无法设置未定义的属性’C1′
我在这里做错了什么?
解决方法:
您可以使用动态方法并减少给定的键,直到最后一个元素,并将其用作分配值的访问器.
在获取正确的内部对象的内部,如果对象不存在,则会将默认对象分配给属性.
function setValue(object, path, value) {
var last = path.pop();
path.reduce((o, k) => o[k] = o[k] || {}, object)[last] = value;
return object;
}
var raw_data = [["A1", "B1", "C1", 1], ["A1", "B1", "C1", 2], ["A1", "B1", "C2", 3], ["A1", "B2", "C1", 4], ["A1", "B2", "C1", 5], ["A1", "B2", "C2", 6], ["A1", "B2", "C2", 7], ["A2", "B1", "C1", 8], ["A2", "B1", "C1", 9], ["A2", "B1", "C2", 10], ["A2", "B1", "C2", 11], ["A2", "B2", "C1", 12], ["A2", "B2", "C1", 13], ["A2", "B2", "C2", 14], ["A2", "B2", "C2", 15]],
object = raw_data.reduce((r, a) => setValue(r, a.slice(0, -1), a[a.length - 1]), {});
console.log(object);
.as-console-wrapper { max-height: 100% !important; top: 0; }
内容总结
以上是互联网集市为您收集整理的javascript-创建嵌套数据时“找不到未定义的属性名称”全部内容,希望文章能够帮你解决javascript-创建嵌套数据时“找不到未定义的属性名称”所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。