首页 > 解决方案 > Codewars Coding Meetup #6 - 他们可以用同一种语言编码吗?

问题描述

我开始非常基本地尝试使用 for 和 if 循环来解决这个问题,而不是任何对我自己来说太高级的东西。我正在寻求朝着正确的方向前进。

您将获得一组对象(PHP 中的关联数组),这些对象表示已注册参加您正在组织的下一次编码聚会的开发人员的数据。

您的任务是返回:

如果列表中的所有开发人员使用相同的语言代码,则为 true;否则为假。例如,给定以下输入数组:

var list1 = [
  { firstName: 'Daniel', lastName: 'J.', country: 'Aruba', continent: 'Americas', age: 42, language: 'JavaScript' },
  { firstName: 'Kseniya', lastName: 'T.', country: 'Belarus', continent: 'Europe', age: 22, language: 'JavaScript' },
  { firstName: 'Hanna', lastName: 'L.', country: 'Hungary', continent: 'Europe', age: 65, language: 'JavaScript' },
];

你的函数应该返回true。

我的逻辑是,如果数组中的每种语言都等于第一种语言,那么它应该返回 true,因为很明显它们都是相同的,如果不返回 false。

但是,当我运行代码时,它只返回 true 并且无法返回 false,这就是我所拥有的:

function isSameLanguage(list) {
  for (var i = 0; i < list.length; i++) {
    if (list[i].language === list[0].language) {
      return true;
    }
  }
  return false;
}

标签: javascript

解决方案


用简单的语言,您的代码意味着

if (list[i].language === list[0].language) {
  return true;
}

上述部分意味着如果list[i].language(任何语言)等于第一个元素的语言list[0].language ,则返回true。所以这不是你想要的。

如果任何一种语言list[i].language不等于第一语言,你想要list[0].language然后返回false

您应该将条件从===to更改为!==然后在循环内返回 false

var list1 = [
  { firstName: 'Daniel', lastName: 'J.', country: 'Aruba', continent: 'Americas', age: 42, language: 'JavaScript' },
  { firstName: 'Kseniya', lastName: 'T.', country: 'Belarus', continent: 'Europe', age: 22, language: 'JavaScript' },
  { firstName: 'Hanna', lastName: 'L.', country: 'Hungary', continent: 'Europe', age: 65, language: 'JavaScript' },
];

function isSameLanguage(list) {
  for (var i = 1; i < list.length; i++){
    if (list[i].language !== list[0].language){
    return false;
    }
  }
  return true;
}
console.log(isSameLanguage(list1))


推荐阅读