【问题标题】:Find a Relation array and object查找关系数组和对象
【发布时间】:2020-08-04 19:20:20
【问题描述】:
let data = [{
    name: "Sarah",
    year: ["1924", "1936", "1948", "1960", "1972", "1984", "1996", "2008", "2020", "2032"]
  },
  {
    name: "Ann",
    year: ["1925", "1937", "1949", "1961", "1973", "1985", "1997", "2009", "2021", "2033"]
  }
];

我们分配一个数组,数组内部有两个对象,每个对象都有另一个数组。

我想询问用户她的出生年份并从名称中的对象值中选择她的名字。

例如,如果她出生于 1949 年,她的名字必须是 Ann,或者如果她出生于 1960 年,她的名字必须是 Sarah。

我想了两天,但我无法解决这个问题。

我不想编写代码 if/else 或 case 切换状态。还有其他代码选项吗? 我想在姓名和年份之间建立关联。

希望我解释清楚..

【问题讨论】:

  • 如果她出生于 1959 年会怎样?她的名字应该是undefined吗?
  • 我们可以为其他名字再做几年。
  • 您可以使用 Nullish 合并运算符返回默认值,请检查 @halilibrahimtosun
  • @halilibrahimtosun 如果这些答案中的任何一个解决了您的问题,并且您不需要任何其他帮助,请考虑接受该答案。谢谢!
  • 感谢这些解决方案对我帮助很大。

标签: javascript arrays object if-statement case


【解决方案1】:

我想这就是你要找的东西

let data = [{
  name: "Sarah",
  year: ["1924", "1936", "1948", "1960", "1972", "1984", "1996", "2008", "2020", "2032"]
}, {
  name: "Ann",
  year: ["1925", "1937", "1949", "1961", "1973", "1985", "1997", "2009", "2021", "2033"]
}];

function yearToName(year) {
  return data.find(x => x.year.includes(year)).name;
}

console.log(yearToName("1936"))
console.log(yearToName("1937"))

【讨论】:

    【解决方案2】:

    您可以使用Array.findArray.includes 来完成此操作:找到年份包含您要查找的内容的条目,然后从中提取名称。像这样的:

    function getName (searchYear) {
      const entry = data.find(({year}) => year.includes[searchYear]);
      return entry?.name;
    }
    

    【讨论】:

      【解决方案3】:

      这可能不是您想要的,但通过设置查找结构,您可以加快并简化以下搜索步骤。它将以稳定的方式运行,即。 e.多年来,如果没有定义名称,将返回“未定义”。

      let data = [ 
           {name:"Sarah",
            year:["1924", "1936", "1948", "1960", "1972", "1984", "1996", "2008", "2020", "2032"]},
           {name:"Ann", 
            year:["1925", "1937", "1949", "1961", "1973", "1985", "1997", "2009", "2021", "2033"]}
          ];
      
      // setup a looup structure:
      data.lookup=data.reduce((a,{name,year})=>(year.forEach(y=>a[y]=name),a),{})
      
      // run a test over many years:
      for (let y=1923;y<2034;y++) data.lookup[y] && console.log(y,data.lookup[y]);

      【讨论】:

        【解决方案4】:

        你可以写一个函数来获取名字

        用这些方法

        1. Array.find - 从对象数组中获取单个对象
        2. Array.includes - 在年份数组中查找过去的年份
        3. ? - 可选链接,为了得到错误,它将返回 undefined 或 null
        4. ?? - Nullish 合并运算符,当左侧为 null 或未定义时返回右侧

        let data = [{
          name: "Sarah",
          year: ["1924", "1936", "1948", "1960", "1972", "1984", "1996", "2008", "2020", "2032"]
        }, {
          name: "Ann",
          year: ["1925", "1937", "1949", "1961", "1973", "1985", "1997", "2009", "2021", "2033"]
        }];
        
        const getTheName = (year) => data.find(datumn => datumn.year.includes(year))?.name ?? `Don't have a name`
        
        console.log(getTheName('1924')) // Sarah
        console.log(getTheName('1949')) // Ann
        console.log(getTheName('2020')) //Don't have a name

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-17
          • 1970-01-01
          • 2020-07-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多