【发布时间】:2013-04-08 09:20:07
【问题描述】:
我想使用类似"a.0.b" 的路径字符串在 JSON 中设置值,以获取如下所示的 JSON:
{
a: [
{
b: 'c'
}
]
}
我想出了这个解决方案,但我想知道是否有更简单的方法来写这个:
function setValue(path, value, json) {
var keys = path.split('.');
_.reduce(keys, function(obj, key, i) {
if (i === keys.length - 1) {
obj[key] = value;
} else {
return obj[key];
}
}, json);
}
所以调用setValue('a.0.b', 'd', {a:[{b:'c'}]}) 会将json 更改为{a:[{b:'d'}]}
【问题讨论】:
-
仅供参考,JSON 是一种文本数据交换格式。您在问题中指的是(嵌套的)JavaScript 对象/数组。
-
那么你想设置像
a[0].b = 1;这样的变量,还是我完全错了? -
在
setvalue中将传递路径字符串、新值和值应该更改的json。用一个例子更新了问题。 -
在您的示例中,
a数组不包含'0'(字符串)的键。您必须将字符串转换为整数才能访问a数组的第一个索引。 -
为了明确贴出的功能效果很好,我只是想知道功能是否可以简化。
标签: javascript json underscore.js lodash