@VitaUshakov51
Frontend-Developer

Решил задачу, но вопрос насколько верное решение выбрал?

При нажатии b-14 выполняете функцию f14. Функция должна в out-14 выводить нулевые (по индексу) элементы вложенных массивов в a14. Вывод через пробел.
let a14 = {
    'prim': [1, 2, 23],
    'one': [3, 4, 5],
    'testt': [6, 7, 8],
    'ivan': [9, 10]
};

function f14() {
    let out = '';
    let arr = [];
    for (let key in a14) {
        arr = a14[key];
        out += arr[0] + ' ';
    };
    document.querySelector('.out-14').innerHTML = out;
}

document.querySelector('.b-14').onclick = f14;
  • Вопрос задан
  • 209 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Ревью
В вашем решении можно улучшить мелочи:
1. переменная arr нужна только внутри цикла, лучше её туда и поместить. В большом коде проще будет разобраться, когда ограничена область видимости созданных переменных. const вместо let уместнее, т.к. внутри цикла значение key не меняется, да и arr тоже:
for (const key in a14) {
  const arr = a14[key];
  // ...
}


2. т.к. просят «через пробел» – удобнее всего складывать значения в массив, а потом его .join(' ') – это избавляет от проблемы лишнего пробела, да и мухи данные отдельно, оформление отдельно.

3. вместо innerHTML лучше innerText, т.к. выводимое не содержит разметки, и зачем заставлять браузер пытаться разбирать его как HTML.

4. вешать слушателя события клика лучше через addEventListener:
- document.querySelector('.b-14').onclick = f14;
+ document.querySelector('.b-14').addEventListener('click', f14);


Альтернатива
На какой стадии обучения выдали это задание, мне неизвестно.
Но раз там есть и объект a14, то может, слышали про Object.values().
А раз в задании говорят про массивы, то, может, знакомы методы map() и join()?

Можно решить так:
const f14 = () => document.querySelector('.out-14') // элемент для вывода результата
  .innerText = Object.values(a14) // массив массивов [ [1, 2, 23], [3, 4, 5], ... ]
    .map(arr => arr[0]) // вместо каждого под-массива, его первый элемент
    .join(' '); // склеить в строку через пробел
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы