如果我有以下字符串或数组:
var thestring = '[0]["more"][0]["more"][0]["text"]';
var thearray = ['0','more','0','more','0','text'];
如何使用该字符串或数组来识别对象的一部分,以便对其进行编辑?
var theobject = [
{
"id":1,
"text":"hello",
"more": [
{
"id":2,
"text":"hello",
"more":[
{
"id":3,
"text":"hello", // I want to edit this
"more": [
{
"id":4,
"text":"hello",
"more":[
]
}
]
}
]
}
]
},
{
"id":5,
"text":"hello"
},
{
"id":6,
"text":"hello"
},
{
"id":7,
"text":"hello"
}
];
基本上我正试图访问该对象的这一部分:
theobject[0]["more"][0]["more"][0]["text"];
但是如果我用字符串做它就不起作用:
theobject[thestring];
答案 0 :(得分:2)
查看lodash _.get和_.set函数,它们允许您使用路径类型语法访问对象,例如:
_.get(object, 'property1.property2.property3', defaultValue);
存在等效的_.set函数,它们都很有用。
来自lodash docs:
var object = { 'a': [{ 'b': { 'c': 3 } }] };
_.get(object, 'a[0].b.c');
_.get(object, ['a', '0', 'b', 'c']);
_.get(object, 'a.b.c', 'default');
提供默认对象的能力也很不错,它使访问深度对象的对象非常容易。
Set以类似的方式工作:
var object = { 'a': [{ 'b': { 'c': 3 } }] };
_.set(object, 'a[0].b.c', 4);
console.log(object.a[0].b.c);
// => 4
_.set(object, ['x', '0', 'y', 'z'], 5);
console.log(object.x[0].y.z);
// => 5
答案 1 :(得分:2)
如果您需要它而没有依赖项,此函数将更新thearray
:
function setObjectValue(o, a, v) {
a = a.slice(); // copy array
p = a.pop(); // get last value for updating
a.forEach(function(p) { o = o[p]; }); // traverse object for each property in a
o[p] = v; // update the final value
}
用法:setObjectValue(theobject, thearray, 'UPDATED')