在设置条件以仅在数组中存在相应对象时才执行函数时遇到问题

Having trouble setting condition to only perform a function if a corresponding object exists INSIDE AN ARRAY

本文关键字:对象 执行 问题 遇到 函数 条件 设置 数组 存在      更新时间:2023-09-26
var ages = [];
for (var person in byName){
  if (typeof byName[person.mother] != "undefined")
    ages.push(ageDifference(person));
}
console.log(ages);

正是这种特定的代码将不起作用。 我知道该功能ageDifference有效。 被认为是问题的行是 if 条件无法按我的预期运行:

function ageDifference(person){
  var ageDiff = person.born - byName[person.mother].born;
  return ageDiff;
}

byName 是一个具有多个属性的名称映射对象,其中只有 2 个相关是 bornmother 。 即:

{
name:   "Philibert Haverbeke"
sex:    "m"
born:   1907
died:   1997
father: "Emile Haverbeke"
mother: "Emma de Milliano"
}

我试图建立一系列人与母亲之间的年龄差异。 由于其中一些在 mother 属性中指定了母体,这些母体在封闭对象中不作为对象存在,因此循环在这些人身上时应跳到下一次迭代。 这似乎是症结所在,因为当我按原样运行代码时,没有任何内容被推送到数组中,如果我删除条件,我或多或少会收到一个错误,说当对象传递给 ageDifference 时,没有这样的属性诞生于所述对象(因为该对象不存在!

我猜你用错了for,让我们试试。

for (var name in byName){
   var person = byName[name];
  if (typeof byName[person.mother] != "undefined")
    ages.push(ageDifference(person));
}

当您发现这样的问题时,我能建议的最好的方法是通过在怀疑的任何地方添加console.log来进行简单的详细跟踪。

例如,您怀疑IF条件,然后通过添加跟踪日志来确保它工作正常。

var ages = [];
for (var person in byName){
  console.log( ["Looping -> ", person] )
  console.log( "TypeOf mother = " + (typeof byName[person.mother])  )
  if (typeof byName[person.mother] != "undefined"){
     console.log( "Mother Exists!");
     ages.push(ageDifference(person));
  }else{
     console.log( "Mother Not exists!");
  }
}
console.log(ages);

一旦发现问题,您就可以删除这些痕迹以获得更好的性能。