javascript - 动态地从对象中获取值
问题描述
我想将一个上下文从服务器传递给客户端,以便客户端更动态地在对象中获取一个值。
服务器传递一个带有值的对象,例如:"booking__validating_carrier__iata": "Cia"
.
booking__validating_carrier__iata
转换成一个数组['booking', 'validating_carrier', 'iata']
,想法是得到order['booking']['validating_carrier']['iata']
或order.booking.validating_carrier.iata
有了这个,我想进入一个对象。我能想到的唯一方法是:
if(arr.length === 1) {
order[arr[0]]
} else if(arr.length === 2) {
order[arr[0]][arr[1]]
} else if(arr.length === 3) {
order[arr[0]][arr[1]][arr[2]]
} else if(arr.length === 4) {
order[arr[0]][arr[1]][arr[2]]
} else if(arr.length === 5) {
order[arr[0]][arr[1]][arr[2]][arr[3]]
}
但是没有办法循环数组的长度以深入对象吗?
谢谢!
解决方案
您可以reduce
将数组order
作为initialValue
参数。这将在每次迭代中将嵌套对象作为累加器
arr.reduce((acc, k) => acc[k] || {}, order)
这是一个片段:
const nested = {
"1": {
"1.1": {
"1.1.1": "3 level nesting"
},
"1.2": "2 level nesting"
}
}
const getValue = (order, arr) => arr.reduce((acc, k) => acc[k] || {}, order)
console.log( getValue(nested, ["1", "1.1", "1.1.1"]) )
console.log( getValue(nested, ["1", "1.2"]) )
推荐阅读
- javascript - 将文本动态添加到列表后,如何更改文本(编辑其内容或类)
- javascript - 在 JavaScript 中将字符串转换为十进制数
- xpath - 如何使用 importxml 将网页内容下载到 Google 表格
- python - 如何单击网页中所有选定的链接,然后返回登录页面并单击下一个链接
- php - PHP 刀片 | 仅当等于某个值时才打印特定数据
- javascript - 如何删除窗口对象以进行测试?
- javascript - 将地图作为组的一部分附加(多个地图)
- google-chrome - Chrome 开发工具:内存堆快照显示特殊图标而不是 unicode 字符(以前是红色/黄色突出显示)
- php - 如果我要从数据库查询,我如何将数组中的数据 foreach 到 xmls 标签,以便将消息发送到多个号码
- swift - 重新加载数据后我的 TableView 没有改变