【问题标题】:Is there any simple and clear way to search values in arbitrary deep branchy objects?是否有任何简单明了的方法来搜索任意深分支对象中的值?
【发布时间】:2018-01-31 12:45:10
【问题描述】:

我看到了一种聪明的方法:使用JSON.stringify 递归遍历对象,如下所示:

function search(obj, str) {
  let flag = false;

  JSON.stringify(obj, (key, value) => {
    if (typeof value === "object") return value;
    else {
      // doesn't take into account Date cases etc
      if (value.indexOf(str) >= 0) {
        flag = true;
      }
    }
  })

  return flag;
}

P.S:不确定标签。

【问题讨论】:

  • 请添加数据示例和想要的结果。
  • 通常树的答案是某种形式的递归。
  • 是的,有一种在树中搜索值的简单明了的方法:DFS。你真的不应该为此使用JSON.stringify
  • @NinaScholz 只是一些具有多个层的嵌套对象,例如{a: 'aaa', b: 'bbb', c: { d: 'ddd', e: { f: 'fff', g: 'ggg' } }}
  • @Bergi 在我的情况下,DFS 和 BFS 有什么区别?因为我需要在最坏的情况下检查所有值。当我得到from MDN 时,stringify 以 BFS 风格运行。

标签: javascript json object search


【解决方案1】:

您可以使用depth-first search 来使用传统的迭代和递归方法。

function findString(object, string) {
    return Object.keys(object).some(k => typeof object[k] === 'object'
        ? findString(object[k], string)
        : object[k].includes(string)
    );
}

var object = { a: 'aaa', b: 'bbb', c: { d: 'ddd', e: { f: 'fff', g: 'ggg' } } };

console.log(findString(object, 'ggg'));
console.log(findString(object, 'foo'));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多