首页 > 解决方案 > 动态地从对象中获取值

问题描述

我想将一个上下文从服务器传递给客户端,以便客户端更动态地在对象中获取一个值。

服务器传递一个带有值的对象,例如:"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]]
}

但是没有办法循环数组的长度以深入对象吗?

谢谢!

标签: javascriptarraysjsonfor-loopobject

解决方案


您可以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"]) )


推荐阅读