【问题标题】:A loop is returning an extra time more only when inside a function只有在函数内部时,循环才会返回额外的时间
【发布时间】:2018-08-07 06:27:32
【问题描述】:

如果我错过了一些非常简单的东西,非常抱歉。

我一直在尝试写一些东西,它将返回一个属性编号、属性名称和对象的所有属性值的列表,格式如下:

"n property - property value"

我确信我已经以一种完全过于复杂的方式解决了这个问题,但这里是代码:

var person = {
    names: ["A", "B", "C"],
    dob: "D",
    age: 21,
    job: "E",
    car: ["F", 2, "G", "H", "I", "J", "K"],
    phone: "L",
    instrument: "M",
    parents: ["N", "O", "P"], 
    born: "Q",
    lives: "R",
    university: "S",
};

function lister (name) {
  for (i=0; i<(Object.keys(name).length); i++) {
  if (((Object.values(name)[i].constructor) == Array) === true) {
    for (x=0; x<(Object.keys(Object.values(name)[i]).length); x++) {
      console.log(i + " " + Object.keys(name)[i] + " - " + Object.values(Object.values(name)[i])[x]);
    }
  }else{
    console.log(i + " " + Object.keys(name)[i] + " - " + Object.values(name)[i]);
  }
}
};

console.log(lister(person));

for (i=0; i<(Object.keys(person).length); i++) {
  if (((Object.values(person)[i].constructor) == Array) === true) {
    for (x=0; x<(Object.keys(Object.values(person)[i]).length); x++) {
      console.log(i + " " + Object.keys(person)[i] + " - " + Object.values(Object.values(person)[i])[x]);
    }
  }else{
    console.log(i + " " + Object.keys(person)[i] + " - " + Object.values(person)[i]);
  }
};

问题是,当我在 function lister (name) 中调用 for 循环时,它似乎额外运行了一次,给了我:

"0 names - A"

"0 names - B"

"0 names - C"

"1 dob - D"

...

"9 lives - R"

"10 university - S"

undefined

但是,当从函数中取出 for 循环时(正如我在底部所做的那样),它会正常返回,而不是返回额外的“未定义”。我做错了什么?

【问题讨论】:

  • (Object.values(name)[i].constructor) == Array) === truesrsly?

标签: javascript list function for-loop undefined


【解决方案1】:

我会怎么做

 function lister(obj){
   let i = 0;
   for(const [key, value] of Object.entries(obj)){
      if(Array.isArray(value)){
        for(const entry of value)
           console.log(i + " " + key + "-" + entry);
      } else {
        console.log(i + " " + key + "-" + value);
      }
      i++;
   }
}

【讨论】:

    【解决方案2】:

    extra 不是来自循环,而是来自函数调用。如果函数没有显式返回任何内容,则返回 undefined,在下面的 sn-p 中,函数 lister 正在返回 x,因此您将看到 x 而不是 undefined

    var person = {
      names: ["A", "B", "C"],
      dob: "D",
      age: 21,
      job: "E",
      car: ["F", 2, "G", "H", "I", "J", "K"],
      phone: "L",
      instrument: "M",
      parents: ["N", "O", "P"],
      born: "Q",
      lives: "R",
      university: "S",
    };
    
    function lister(name) {
      for (i = 0; i < (Object.keys(name).length); i++) {
        if (((Object.values(name)[i].constructor) == Array) === true) {
          for (x = 0; x < (Object.keys(Object.values(name)[i]).length); x++) {
            console.log(i + " " + Object.keys(name)[i] + " - " + Object.values(Object.values(name)[i])[x]);
          }
        } else {
          console.log(i + " " + Object.keys(name)[i] + " - " + Object.values(name)[i]);
        }
      }
      return 'x'
    };
    
    console.log(lister(person));
    
    for (i = 0; i < (Object.keys(person).length); i++) {
      if (((Object.values(person)[i].constructor) == Array) === true) {
        for (x = 0; x < (Object.keys(Object.values(person)[i]).length); x++) {
          console.log(i + " " + Object.keys(person)[i] + " - " + Object.values(Object.values(person)[i])[x]);
        }
      } else {
        console.log(i + " " + Object.keys(person)[i] + " - " + Object.values(person)[i]);
      }
    };

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-07
      • 1970-01-01
      • 1970-01-01
      • 2019-08-22
      • 2015-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多