【问题标题】:Get root property of an object using recursion使用递归获取对象的根属性
【发布时间】:2018-01-19 01:20:22
【问题描述】:

当我将假对象应用于函数时,我的算法正常工作,但在 CodeWars 上它继续失败。我很好奇我的代码中缺少哪些检查。我相信我必须使用某些正则表达式,但我很困惑。这是问题的链接https://www.codewars.com/kata/get-root-property-name

function getRootProperty(object, val) {
var valueFound = false;
let output = '';
 for (var first in object) {
 var seachObject = object[first]
  function query(object, val, rootName) {
    Object.getOwnPropertyNames(object).forEach((value) => {
      if (object[value] == val) {
        valueFound = true;
        output = rootName
        return
      } else {
        query(object[value], val, rootName)
      }
    })
}
  query(seachObject, val, first);
}

if (valueFound == false) {
   return null
} else {
   return output;
}

}

【问题讨论】:

  • 一个指向 codewars 问题描述的链接会很有用,我只是看到一堆代码应该做一些我不知道的事情。

标签: javascript oop for-loop recursion data-structures


【解决方案1】:

幸运的是,我只需要搜索新的 CodeWars 问题并相对较快地找到它:Problem description。这是您的问题:[...] other root properties may also have 9 buried in it but you should always return the first

使用if (!valueFound) query(object[value], val, rootName) 进行第一次调用(递归调用无关紧要)。

问题假设在 ecmascript8 中有效的 javascript 属性中的顺序,部分在 ecmascript6 中,而在较低版本中则根本没有。

【讨论】:

  • 我通过创建“else if”语句将您的建议添加到“else”语句中,并且通过了他们的所有测试。谢谢!
【解决方案2】:

您也可以这样做;

function findRootProperty(o,x,p = this){
  return Object.keys(o)
               .reduce((r,k) => Array.isArray(o[k]) ? o[k].includes(x) ? r.concat(k)
                                                                       : r
                                                    : r.concat(findRootProperty(o[k],x,k)),[])
               .map(q => p === this ? q : p );
}

object = {
    "r1n": {
        "mkg": {
            "zma": [21, 45, 66, 111],
            "mii": {
                "ltf": [2, 5, 3, 9, 21]
             },
             "fv": [1, 3, 6, 9]
         },
         "rmk": {
             "amr": [50, 50, 100, 116, 150, 250]
         }
    },
    "fik": {
        "er": [592, 92, 32, 13],
        "gp": [12, 34, 116, 29]
    }
};

console.log(findRootProperty(object,116))

【讨论】:

    猜你喜欢
    • 2011-05-12
    • 1970-01-01
    • 2021-12-10
    • 2021-01-01
    • 2020-11-18
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多