gpt4 book ai didi

javascript - 在不更改不同子路径中的相同 key 对值的情况下,在嵌套的 json 对象中查找和更新

转载 作者:行者123 更新时间:2023-11-29 17:15:53 25 4
gpt4 key购买 nike

这是对我之前问题的更新 Find and update in nested json object

示例数据

TestObj = {
"Categories": [{
"Products": [{
"id": "a01",
"name": "Pine",
"description": "Short description of pine."
},
{
"id": "a02",
"name": "Pine",
"description": "Short description of pine."
},
{
"id": "a03",
"name": "Poplar",
"description": "Short description of poplar."
}],
"id": "A",
"title": "Cheap",
"description": "Short description of category A."
},
{
"Product": [{
"id": "b01",
"name": "Maple",
"description": "Short description of maple."
},
{
"id": "b02",
"name": "Oak",
"description": "Short description of oak."
},
{
"id": "b03",
"name": "Bamboo",
"description": "Short description of bamboo."
}],
"id": "B",
"title": "Moderate",
"description": "Short description of category B."
}]
};

我的函数

function getObjects(obj, key, val, newVal) {
var newValue = newVal;
var objects = [];
for (var i in obj) {
if (!obj.hasOwnProperty(i)) continue;
if (typeof obj[i] == 'object') {
objects = objects.concat(getObjects(obj[i], key, val, newValue));
} else if (i == key && obj[key] == val) {
obj[key] = newValue;
}
}
return obj;
}

称为

getObjects(TestObj, 'id', 'A', 'B');

如果我要更新 id,它工作正常;因为 id 没有重复项。但是,如果我更新名称,则所有匹配键值对的数据都会更新。但是如何将其限制为特定的 key 对值。

我应该为函数提供什么来约束更新范围以及如何实现它。请帮助我。

注意:我将要操作的 json 是动态生成的,所以我不能在函数中有任何硬编码值

最佳答案

我认为您可以以某种方式使用路径来定位值,然后进行更新。我从这个post得到了这个想法. (由@shesek 回答)

var getPath = function (obj, path, newValue) {
var parts = path.split('.');
while (parts.length > 1 && (obj = obj[parts.shift()]));
obj[parts.shift()] = newValue;
return obj;
}

console.log(getPath(TestObj, 'Categories.0.Products.1.id', 'AAA'))
console.log(TestObj)

所以你可以传入对象的路径,比如你想更新下面对象的id为“AAA”,你可以传入Categories.0 .Products.1.id

    {
"id": "a02",
"name": "Pine",
"description": "Short description of pine."
}

那么,对象就会变成

    {
"id": "AAA",
"name": "Pine",
"description": "Short description of pine."
}

希望它能有所启发!

关于javascript - 在不更改不同子路径中的相同 key 对值的情况下,在嵌套的 json 对象中查找和更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17993296/

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