gpt4 book ai didi

javascript - 如何从键和值列表创建嵌套对象?

转载 作者:行者123 更新时间:2023-12-01 11:10:23 26 4
gpt4 key购买 nike

我正在尝试编写一个脚本,该脚本接受一组键和一个值并返回一个对象:

keys = ['a', 'b', 'c'];
value = 'hello';

我正试图得到这个:

{'a': {'b': {'c': 'hello'}}}

我的代码:

var data = {};
for (var i=0; i < keys.length; i++) {
var key = keys[i];
if (i < keys.length -1) {
if (data[key] === undefined) {
data[key] = {};
}
} else {
data[key] = value;
}
data = data[key];
}

我还想确保任何已经包含在 data 值中的数据在使用不同的 key 时都不会被删除。

最佳答案

您可以使用 Array.prototype.reduceRight , 像这样

var keys = ['a', 'b', 'c'];
var value = 'hello';

console.log(keys.reduceRight(function (pastResult, currentKey) {
var obj = {};
obj[currentKey] = pastResult;
return obj;
}, value));
// { a: { b: { c: 'hello' } } }

reduceRight 将从右到左处理数组。每次我们创建一个新对象并根据当前键名存储旧对象。因此,当我们一个一个地迭代时,我们正在增加对象的嵌套。我们将 value 作为最后一个参数传递,它将在第一次用作 pastResult


如果你想修复你的原始代码,你只需要停止将新对象分配给 data 并使用另一个变量,就像这样

var keys = ['a', 'b', 'c'],
value = 'hello',
data = {},
temp = data;

for (var i = 0; i < keys.length; i++) {
var key = keys[i];
if (i < keys.length - 1) {
if (temp[key] === undefined) {
temp[key] = {};
}
} else {
temp[key] = value;
}
temp = temp[key];
}

console.log(data)
// { a: { b: { c: 'hello' } } }

连这个都可以写的简洁一点,像这样

for (var i = 0; i < keys.length - 1; i++) {
temp = (temp[keys[i]] = {});
}
temp[keys[keys.length - 1]] = value;

我们迭代所有的 keys 除了最后一个,每次都为当前键分配一个新对象,因为我们将它分配回 temp,在下一次迭代temp 将引用新创建的对象。最后,我们将 value 分配给 keys 的最后一个元素。

关于javascript - 如何从键和值列表创建嵌套对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30182541/

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