【问题标题】:Explanation and guidance on search function that searches an object搜索对象的搜索功能的说明和指导
【发布时间】:2014-01-17 11:56:58
【问题描述】:

只是在我正在做的练习中寻找对几件事的虚拟解释,我并不完全理解。

我在这里创建了一个包含两个条目的对象:

var friends = {
    bill: {
        firstName: "Bill",
        lastName: "Gates",
        number: "(206) 555-5555",
        address: ['One Microsoft Way','Redmond','WA','98052']
    },

    steve: {
        firstName: "Steve",
        lastName: "Jobs",
        number: "(292) 676- 3434",
        address: ['One Microsoft way',' Redmond', 'WA', '98052']
    }
};

我完全理解这一点,我只是把它作为前言,以便您了解我的搜索功能。

我有两个函数,我希望有人能用虚拟术语来解释。第一个:

var list = function(friends) {

for (var key in friends) {

    console.log(key);
}
};

我有点理解 - 我设法让它工作,但我不认为我完全理解它为什么工作。这是一个查看好友对象的函数,对吗?用那部分function(friends) 然后是一个for循环,循环遍历我的对象中的条目并将密钥记录到控制台。其中显示了比尔和史蒂夫。

我不明白(var key in friends) 如何知道循环并存储对象两个元素?是不是它只是该函数的一个持有变量,并且因为我定义了function(friends),所以它只是查找对象的父元素?

其次这个函数:

var search = function(name) {

    for (var key in friends) {

        console.log...

    }
    };

我正在尝试将对象中两个父元素的子元素记录到控制台。所以比尔和史蒂夫的名字、姓氏、号码、地址。

我不确定将这些记录到控制台的格式,我尝试过console.log(friends[bill]);,但我认为这不是正确的语法。

任何指导都会很棒 - 我觉得我有点接近了。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    如果对象是 JSON,那么循环将在键之上,而不是说将作为数组索引的数组,请尝试以下操作

    console.log(friends[key]);
    

    【讨论】:

      【解决方案2】:

      JavaScript 中的对象是键值对的集合。您的 friends 对象是具有 2 个键值对的集合。集合中的 2 个键是 billsteve。 2 个值中的每一个都是一个具有 4 个键值对的对象:firstName -> Bill 等。

      第一个函数list 是一个将任何对象作为参数并记录其所有键的函数。它需要什么对象取决于你调用它的对象。参数名为friends 并且与您的变量名称相同的事实纯属巧合。

      对于第二个函数,您需要嵌套您的 for 循环。如果没有函数,你会做这样的事情:

      for (var name in friends) {
        for (var innerKey in friends[name]) {
          console.log(name, innerKey, friends[name][innerKey]);
        }
      }
      

      使用您已经编写的函数list,您可以执行以下操作:

      var showNested = function(object) {
        for (var name in object) {
          console.log('Information for ', name);
          list(object[name];
        }
      }
      
      // Usage:
      showNested(friends);
      

      【讨论】:

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