gpt4 book ai didi

javascript - 用动态创建的路径替换嵌套的 JavaScript 对象数据项?

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

我有这个 JSON 数据对象(示例):

let obj = [
{
test0: [
{testA: 'ContentA' },
{testB: 'ContenB'}
]
}
];

我想动态替换键“testB”的值。 IE。我需要能够处理对象中的任何项目并替换 ist。

这是我到目前为止正在做的事情:

因此,我以编程方式生成一个混合键/索引路径来寻址目标对象,它看起来像这样(以数组形式):

let path = [0,'\'test0\'',1,'\'testB\''];

为了将其放入执行实际替换的可执行形式中,我将路径转换为 ​​JavaScript 代码并使用 eval 运行它。像这样:

let newText = 'ContentB';
eval(`obj[${path.join('][')}]=\'${newText}\'`);

Eval 执行此代码文字:

obj[0]['test0'][1]['testB'] = 'ContentB'

这可行,但如果可能的话,我想知道是否有另一种方法可以在不使用“eval”的情况下工作。

最佳答案

您可以使用递归函数并将属性路径作为属性数组传递给它,如下所示:

function setDeepValue(obj, [prop, ...path], value) {
if (!path.length) {
obj[prop] = value;
} else {
if (!(prop in obj)) obj[prop] = {};
setDeepValue(obj[prop], path, value);
}
}

// Example:
const arr = [{
test0: [
{ testA: 'ContentA' },
{ testB: 'ContenB' }
]
}];

setDeepValue(arr, [0, "test0", 1, "testB"], "ContentB");

console.log(arr);

如果您可以使用库,则可以使用 Lodash,它有 _.set更灵活_.setWith来做到这一点。

关于javascript - 用动态创建的路径替换嵌套的 JavaScript 对象数据项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53762796/

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