我知道我可以很简单地更新对象上的任意字段。
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有足够的创造力,我可能会在对象中循环找到我需要的密钥,但有更简单的方法吗?
正如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>
我使用了lodash合并函数
首先,我必须重建我的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]
]
}
};