Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带有ageDifference的if语句未正确计算最接近的年龄_Javascript - Fatal编程技术网

Javascript 带有ageDifference的if语句未正确计算最接近的年龄

Javascript 带有ageDifference的if语句未正确计算最接近的年龄,javascript,Javascript,当我试图找到与索尼娅·索托马约尔年龄最接近的人时,有些事情不对劲。有人能发现我的错误吗 var notablePeople={ “猫王”:新的日期(1935,0,8), “索尼娅·索托马约尔”:新的日期(1954年5月25日), “富兰克林·D·罗斯福”:新的日期(1882年0月30日), “本·卡森”:新的日期(1951年8月18日), “罗杰·斯塔巴赫”:新的日期(1942年1月5日), 《史蒂夫·乔布斯》:新的日期(1955年1月24日), “阿尔伯特·爱因斯坦”:新的日期(1879年2

当我试图找到与索尼娅·索托马约尔年龄最接近的人时,有些事情不对劲。有人能发现我的错误吗

var notablePeople={
“猫王”:新的日期(1935,0,8),
“索尼娅·索托马约尔”:新的日期(1954年5月25日),
“富兰克林·D·罗斯福”:新的日期(1882年0月30日),
“本·卡森”:新的日期(1951年8月18日),
“罗杰·斯塔巴赫”:新的日期(1942年1月5日),
《史蒂夫·乔布斯》:新的日期(1955年1月24日),
“阿尔伯特·爱因斯坦”:新的日期(1879年2月14日),
“艾萨克·阿西莫夫”:新的日期(1919年9月4日),
“贾达·平克特·史密斯”:新日期(1971年8月18日),
“格雷斯·霍珀”:新的日期(1906年11月9日),
“贾里德·尼古拉斯”:新的日期(1995年5月16日)
};
//找出与索尼娅·索托马约尔年龄最接近的人
var sonyaAge=notablePeople[“Sonya Sotomayor”].getTime();
var年龄差=无穷大;
var personClosest=“”;
对于(以名人身份出现的人){
//看看这个人的年龄差距是否更近
if(person!=“Sonya Sotomayor”&&Math.abs(notablePeople[person].getTime()-sonyaAge)
var notablePeople={
“猫王”:新的日期(1935,0,8),
“索尼娅·索托马约尔”:新的日期(1954年5月25日),
“富兰克林·D·罗斯福”:新的日期(1882年0月30日),
“本·卡森”:新的日期(1951年8月18日),
“罗杰·斯塔巴赫”:新的日期(1942年1月5日),
《史蒂夫·乔布斯》:新的日期(1955年1月24日),
“阿尔伯特·爱因斯坦”:新的日期(1879年2月14日),
“艾萨克·阿西莫夫”:新的日期(1919年9月4日),
“贾达·平克特·史密斯”:新日期(1971年8月18日),
“格雷斯·霍珀”:新的日期(1906年11月9日),
“贾里德·尼古拉斯”:新的日期(1995年5月16日)
};
//找出与索尼娅·索托马约尔年龄最接近的人
var sonyaAge=notablePeople[“Sonya Sotomayor”].getTime();
var年龄差=无穷大;
var personClosest=“”;
对于(以名人身份出现的人){
//看看这个人的年龄差距是否更近
log(person,Math.abs(notablePeople[person].getTime()-sonyaAge)/1000/60/60/24/365);
if(person!=“sonyasotomayor”&&(Math.abs(notablePeople[person].getTime()-sonyaAge)
//你用错误的格式比较年龄,你用的是person而不是personest。我会用personest来解决这个问题。其目的是获取一个数组并将其缩减为单个值。在本例中,我选择将其简化为包含名称和年龄差异的对象

var notablePeople={
“猫王”:新的日期(1935,0,8),
“索尼娅·索托马约尔”:新的日期(1954年5月25日),
“富兰克林·D·罗斯福”:新的日期(1882年0月30日),
“本·卡森”:新的日期(1951年8月18日),
“罗杰·斯塔巴赫”:新的日期(1942年1月5日),
《史蒂夫·乔布斯》:新的日期(1955年1月24日),
“阿尔伯特·爱因斯坦”:新的日期(1879年2月14日),
“艾萨克·阿西莫夫”:新的日期(1919年9月4日),
“贾达·平克特·史密斯”:新日期(1971年8月18日),
“格雷斯·霍珀”:新的日期(1906年11月9日),
“贾里德·尼古拉斯”:新的日期(1995年5月16日)
};
//找出与索尼娅·索托马约尔年龄最接近的人
var sonya=“sonya Sotomayor”;
var sonyaAge=notablePeople[sonya].valueOf();
var年龄差=无穷大;
var personClosest=“”;
//Object.keys返回属性名数组(人员)
var personAge=Object.keys(notablePeople)
//过滤掉索尼娅
.filter(key=>key!==sonya)
//过完剩下的
.reduce((agg,cur)=>{
//agg是“聚合值”;包含名称和年龄差异的对象
//从最后一个循环。
//cur是我们正在查看其信息的人的姓名
//计算它们之间的差值。差值为正。
const diff=Math.abs(notablePeople[cur].valueOf()-sonyaAge);
//返回一个有差异的对象(如果它小于前面的任何一个)
//以及当前人员的姓名(同样,如果差异小于之前的任何差异)
返回{
年龄差异:difflog(`最近的年龄差异是${personAge.person}与${personAge.ageDifference}年差异。`)我解决了这个问题,方法是将其基本化(简化),删除长除法,并使用普通数字检查例程。这个问题很快就暴露出来了;你如何测试新的ageDiff是无效的

基础套管是一种非常有用的技术。这可能不是真正的“技术”基础套管,但概念是相同的;尽可能降低复杂性,您通常可以更轻松地找到正在发生的事情

看看下面的图片。它呈现正确的结果(Staubach)。替换回你的逻辑(我自己,我会省略长除法,直到你已经知道这个人是谁,如果你不确定你有合适的人,没有理由运行这个逻辑),你应该能够继续前进

const notablePeople = {
  "Elvis Presley": 50,
  "Sonya Sotomayor": 30,
  "Franklin D. Roosevelt": 10,
  "Roger Staubach": 20,
  "Ben Carson": 45,
};


console.log ( getPerson () );

function getPerson () {
    let ageDiff = Infinity;
    let finalPerson = null;
    const sonyaAge = notablePeople["Sonya Sotomayor"];
    for (person in notablePeople) {
        if (person !== "Sonya Sotomayor") {
            const testAgeDiff = Math.abs(notablePeople[person] - sonyaAge);
            if ( testAgeDiff < ageDiff ) {
                ageDiff = testAgeDiff;
                finalPerson = person;
            }
        }
    }

    return finalPerson;
}
const notablePeople={
“猫王”:50岁,
“索尼娅·索托马约尔”:30岁,
“富兰克林·D·罗斯福”:10,
“罗杰·斯塔巴赫”:20岁,
“本·卡森”:45岁,
};
console.log(getPerson());
函数getPerson(){
设ageDiff=无穷大;
设finalPerson=null;
const sonyaAge=知名人士[“Sonya Sotomayor”];
对于(以名人身份出现的人){
我
const notablePeople = {
  "Elvis Presley": 50,
  "Sonya Sotomayor": 30,
  "Franklin D. Roosevelt": 10,
  "Roger Staubach": 20,
  "Ben Carson": 45,
};


console.log ( getPerson () );

function getPerson () {
    let ageDiff = Infinity;
    let finalPerson = null;
    const sonyaAge = notablePeople["Sonya Sotomayor"];
    for (person in notablePeople) {
        if (person !== "Sonya Sotomayor") {
            const testAgeDiff = Math.abs(notablePeople[person] - sonyaAge);
            if ( testAgeDiff < ageDiff ) {
                ageDiff = testAgeDiff;
                finalPerson = person;
            }
        }
    }

    return finalPerson;
}