【问题标题】:Is there a way to search a console logged object for particular values in Chrome DevTools?有没有办法在 Chrome DevTools 中搜索控制台记录的对象以获取特定值?
【发布时间】:2013-06-26 17:42:16
【问题描述】:

我想 console.log() 一个对象并在该对象中搜索特定值。这可能吗?

注意:我要搜索的对象是庞大且多维的,因此扩展每个字段并执行简单的 Ctrl+F 查找并不理想。

【问题讨论】:

    标签: google-chrome google-chrome-devtools


    【解决方案1】:

    下面的代码将您正在寻找的内容添加到控制台对象中

    console.logSearchingForValue

    广度优先搜索、匹配等效的“JSON”值、正确处理 NaN、返回多个位置以及使数字索引表达式不被引用作为练习留给读者。 :)

    换成不同的相等定义已经很容易了。

    var searchHaystack = function(haystack, needle, path, equalityFn, visited) {
    
      if(typeof haystack != "object") {
        console.warn("non-object haystack at " + path.join("."));
      }
    
      if(visited.has(haystack))
        return [false, null];
    
      for(var key in haystack) {
        if(!haystack.hasOwnProperty(key))
          continue;
    
        if(equalityFn(needle, haystack[key])) {
          path.push(key);
          return [true, path];
        }
    
        visited.add(haystack);
        if(typeof haystack[key] == "object") {
          var pCopy = path.slice();
          pCopy.push(key);
          var deeper = searchHaystack(haystack[key], needle, pCopy, equalityFn, visited);
          if(deeper[0]) {
            return deeper;
          }
        }
      }
      return [false, null];
    }
    
    var pathToIndexExpression = function(path) {
       var prefix = path[0];
       path = path.slice(1);
       for(var i = 0; i < path.length; i++) {
          if(typeof path[i] == "string")
             path[i] = "\"" + path[i] + "\"";
       }
       return prefix + "[" + path.join("][") + "]"
    }
    
    console.logSearchingForValue = function(haystack, needle) {
       this.log("Searching");
       this.log(haystack);
       this.log("for");
       this.log(needle);
       var visited = new Set();
       var strictEquals = function(a,b) { return a === b; };
       var result = searchHaystack(haystack, needle, ["<haystack>"], strictEquals, visited);
       if(result[0]) {
          this.log("Found it!");
          this.log(pathToIndexExpression(result[1]));
       }
       else {
          this.log("didn't find it");
       }
    }
    

    【讨论】:

    • 那个脚本是你写的吗?这太疯狂了(而且很棒)。我希望在 devtools 中有一种简单而原生的方式来完成它,但这也有效。谢谢!
    • 不,一只鹳恰巧把它放在了我的腿上。 :) 不客气。
    • 我打算用同样的问题开始另一篇文章,这个解决方案让我大吃一惊。这个脚本在我的 TamperMonkey 中。非常感谢。
    • 这里是脚本的小更新,以防止循环对象分配时出现死循环gist.github.com/janmisek/63bd49106e27eea771f4
    • 这很酷。我想我会重新审视这个并添加一些“读者练习”项目......
    【解决方案2】:
    1. 运行(直接在控制台中):

    JSON.stringify(myObject)

    这会将对象作为字符串表示形式输出。

    1. 然后在控制台中输入:

    Ctrl+f

    【讨论】:

    • 嘿。好决定。比其他答案容易得多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-25
    • 1970-01-01
    • 2014-01-04
    • 1970-01-01
    • 2015-09-24
    • 1970-01-01
    相关资源
    最近更新 更多