Почему результат вызова функции передает строчный элемент не разделенный комами?

function openOrSenior(data){
  let user = []
  for (let i = 0; i < data.length; ++i){
    if (data[i][0] >= 55 && data[i][1] > 7){
      user += "Senior"
    } else {
      user += "Open"
    }
  }
  return user 
}
openOrSenior([[45, 12],[55,21],[19, -2],[104, 20]])

Expected
input = [[45, 12],[55,21],[19, -2],[104, 20]]
output = ['Open', 'Senior', 'Open', 'Senior']

Получаю
'OpenSeniorOpenSenior'


Ответы (1 шт):

Автор решения: ThisMan

У вас user имеет тип массива. При сложении со строкой, обе переменные неявно приводятся к строке, поэтому появляется не совсем понятное поведение

const a = 10;
a + '10'; // будет не 20, а 1010
const b = [];
b + '10'; // будет 10, так как пустой массив приводится к пустой строке

Для решения вашей задачи, нужно заменить сложение на вызов метода push массива

function openOrSenior(data){
  let user = []
  for (let i = 0; i < data.length; ++i){
    if (data[i][0] >= 55 && data[i][1] > 7){
      user.push("Senior"); // добавляем элемент в массив
    } else {
      user.push("Open"); // добавляем элемент в массив
    }
  }
  return user 
}
const result = openOrSenior([[45, 12],[55,21],[19, -2],[104, 20]]);
console.log(result);

→ Ссылка