【问题标题】:How to access a particular path/adress inside an object? [duplicate]如何访问对象内的特定路径/地址? [复制]
【发布时间】:2020-09-11 21:08:38
【问题描述】:

我有一个问题,我想我之前可能已经想通了,但我现在想不起来,也想不通。

假设我们有一个深几层的对象,这意味着它具有其他对象的值,这些对象也具有一些值对象等等。

现在我如何创建一个函数,将对象和地址传递给它,然后我可以像这样访问函数内该位置的值:

const getValueAtAdress = (object, 'country.city.rules') => {
return //here I need to return the value at object.country.city.rules.
}

我是否遗漏了一些明显的东西?

【问题讨论】:

  • 这个答案通常已经在stackoverflow上得到了回答。话虽这么说,最简单的形式并且不考虑是否有数组或特殊情况是这样的; path.split('.').reduce((acc, cur) => acc[cur], obj)
  • 您可以通过拆分. 上的“地址”来迭代导航,并使用方括号表示法。基本上,你想要object["country"]["city"]["rules"](检查undefined,可能

标签: javascript function object javascript-objects return-value


【解决方案1】:

我想我想在这里为后人提一下,帮助我的是使用 reduce 的答案,这正是我以前使用的,但我不记得了:

我用于解决特定问题的示例:

let stateLocation = address.split('.').reduce((acc, cur) => acc[cur], state);

【讨论】:

    【解决方案2】:

    您的代码显示了一个函数声明,但您不能在引号中声明参数名称

    但是你可以调用一个函数并传递一个字符串。

    在这种情况下,您只需将字符串拆分为一个数组,然后遍历该数组,构建一组“链式”字符串索引,可以传递给对象。 String.split()Array.reduce() 方法是关键。

    let obj = {
      county: {
          city: {
            rules: "Strict"
          }
      }
    };
    
    const getValueAtAddress = (object, countyCityRules) => { 
      // Split the string at the dots to form an array...
      // The loop over that array and reduce it with an
      // accumulator that is then applied to the object.
      return countyCityRules.split(".").reduce((acc, cur) => acc[cur], obj);;
    }
    
    console.log(getValueAtAddress(obj, "county"));
    console.log(getValueAtAddress(obj, "county.city"));
    console.log(getValueAtAddress(obj, "county.city.rules"));

    【讨论】:

    • 这没有回答原来的问题...我需要能够传递一个字符串并且该字符串可以有多个元素并且函数不会提前知道有多少元素
    • @TalmacelMarianSilviu 抱歉,您的问题没有显示调用函数并传递字符串。它向您展示了 声明 一个函数并错误地声明了一个参数,因此不清楚。答案是一样的——将字符串作为索引传递给对象。我会更新答案以表明这一点。
    • 谢谢,但我已经指定您不会知道您需要获取的值恰好是 3 个元素的深度。它可能是 5 或它可能是 7,所以这不会真正起作用
    • @TalmacelMarianSilviu 你一直说这个解决方案不起作用,但它会起作用。这只是在拆分字符串后循环遍历数组的问题。我会再次更新,但这答案。
    猜你喜欢
    • 1970-01-01
    • 2013-12-31
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 2022-08-17
    • 1970-01-01
    相关资源
    最近更新 更多