@kmv-dev

Как решить данную задачу с помощью цикла?

При нажатии .b-7 выполняете функцию f7. Функция должна переиндексировать массив a7. Что имеется ввиду. Сейчас у нас обычный массив, который содержит вложенные объекты. Вам необходимо сделать из a7 объект, где ключи - значения id из вложенных массивов, а значения - имя (т.е { 23 : Ivan, 45 : Petr}. Функция должна возвращать результирующий массив.

let a7 = [ { id : 23, name: 'Ivan'}, {id: 45, name : 'Petr'}];

function f7() {
    // let a = [];
    // for(let i = 0; i < a7.length; i++){
    //     a += `${a7[i].id} : ${a7[i].name}, `;
    // }
    // console.log(a);
}

document.querySelector('.b-7').addEventListener('click', ()=>{
    console.log(f7());
});

на выходе получаю [object Object]23 : Ivan, 45 : Petr, почему так?
  • Вопрос задан
  • 1332 просмотра
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
const f7 = (arr) => arr.reduce((acc, c) => (acc[c.id] = c.name, acc), {});

То же, циклом:
function f7(arr) {
  const result = {}; // пустой пока объект
  for (let i = 0; i < arr.length; i++) {
    const c = arr[i];
    result[c.id] = c.name;
  }
  return result;
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@vladzuu
Можно без reduce, обычным циклом
function f7() {
    const result = {};
    for (const obj of a7) {
        result[obj.id] = obj.name;
    }
    return result;
}
Ответ написан
Комментировать
@Ibishka
function f7() {
    return a7.map(({id,name})=> (
        {[id]: name}
     ));
}
Ответ написан
Ваш ответ на вопрос

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

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