gpt4 book ai didi

javascript - "Cannot find property name of undefined"创建嵌套数据时

转载 作者:行者123 更新时间:2023-11-29 10:57:37 24 4
gpt4 key购买 nike

我正在尝试使用现有数据集创建嵌套树对象。原始数据集是:

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。但是,这会导致问题,因为第一个递归 (obj['A1']) 将返回 undefined,因此出现以下错误:

"TypeError: Cannot set property 'B1' of undefined

为了解决这个问题,我尝试像这样在 ES6 中使用 proxy 对象,而不是 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;
}
}
});

但是,现在返回以下错误: “类型错误:无法设置未定义的属性‘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 - "Cannot find property name of undefined"创建嵌套数据时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54148776/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com