【问题标题】:JavaScript - retrieve value from nested object, using array of keysJavaScript - 使用键数组从嵌套对象中检索值
【发布时间】:2017-11-19 07:39:57
【问题描述】:

如何使用键数组从嵌套对象中获取值?

// my sample object
var obj = {
    type            : "Purchase",
    category        : "Apartment",
    categoryOptions : {
       apartment : {
           floors    : {
               type        : "number",
               value       : null,
               placeholder : "Total Floors"
           },
       },
    },
}
var keysArray = ["value", "floors", "apartment", "categoryOptions"]

我尝试使用array.reduceRight 来实现这一点,但无法实现。

这是我尝试过的:

var roadToValue = keysArray.reduceRight(
    function(previousValue, currentValue){
        return previousValue + "[" + currentValue + "]" ;
    }
);
// above function results in a single string like 
// "categoryOptions[apartment][floors][value]" 
// which off-course can't be used as object key
// and obj[roadToValue] results in 'undefined'

有什么方法可以让我在这里获得正确的密钥来传递给 obj 吗?

【问题讨论】:

  • 大写? "Apartment" != "apartment"
  • @corn3lius 哦,这是写问题的错字。我的问题仍然存在。我会更新问题。

标签: javascript arrays javascript-objects


【解决方案1】:

您绝对可以为此使用reduceRight。问题是您创建了一个字符串,但是您需要将对象作为initialValue 传递并使用方括号表示法:

var obj = {"type":"Purchase","category":"Apartment","categoryOptions":{"apartment":{"floors":{"type":"number","value":null,"placeholder":"Total Floors"}}}}
var keysArray = ["value", "floors", "apartment", "categoryOptions"]

var value = keysArray.reduceRight((r, e) => r[e] || r, obj)
console.log(value)

【讨论】:

  • 我包含了一个undefined 检查,现在它将返回发生错误的对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-27
  • 2017-08-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
  • 2021-11-28
相关资源
最近更新 更多