我知道我可以很简单地更新对象上的任意字段。
var simpleObj = {
key1: 'value1',
key2: true,
ky3: 47
};
function updateSimpleObj(key, value){
simpleObj[key] = value;
}
但是,如果我有一个更复杂的对象怎么办?
var funObj = {
key1: 'value1',
key2: simpleObj,
key3: [1, 3, 5, 7, 9],
key4: [{name: 'Alice', hired: true}, {name: 'Bob', hired: false}]
key5: {
name: table1,
values:[
[0,1,2],
[{name: 'Alice', hired: true}, {name: 'Bob', hired: false}, {name: "Charles"}],
[true, false]
]
}
};
我如何随意访问funObj
中的任何一个嵌套值?我可以使用某种“深键”吗?
我敢肯定,如果我对LoDash有足够的创造力,那么我可能可以遍历对象来查找所需的键,但是有没有更简单的方法?
答案 0 :(得分:0)
正如Trincot所说,只需使用点号和方括号表示法即可。
<script>
var simpleObj = {
key1: 'value1',
key2: true,
ky3: 47
};
var funObj = {
key: {
name: "table1",
values:[
[0,1,2],
[{name: 'Alice', hired: true}, {name: 'Bob', hired: false}, {name: "Charles"}],
[true, false]
]
}
};
var bigObj = {
key1: "string",
key2: {
value: {val: 0}
}
};
console.log("BigObj: "+bigObj.key2.value.val);
console.log("FunObj: "+funObj.key.values[1][0].name);
</script>
答案 1 :(得分:0)
我使用了lodash merge函数。
首先,我不得不重建我的funObj
,所以它不使用数组,仅使用对象。
对于每种可能的更新,我都需要仔细构造对象的层次结构,并仅包含所需的值。像这样:
_.merge(funObj, {
key5: {
values: {
1: {
hired: true
}
}
}
}
将导致:
var funObj = {
key1: 'value1',
key2: simpleObj,
key3: [1, 3, 5, 7, 9],
key4: [{name: 'Alice', hired: true}, {name: 'Bob', hired: false}]
key5: {
name: table1,
values:[
[0,1,2],
[{name: 'Alice', hired: true}, {name: 'Bob', hired: true}, {name: "Charles"}],
[true, false]
]
}
};