Как заполнить массив объектами, формируемыми в цикле for?

Добрый день. Есть несколько тегов с id вида "call-[ИНДЕКС]". Допустим, всего таких тегов - 10 штук.
Мне нужно получить количество таких тегов и сформировать соответствующее количество (10 в данном случае) объектов. Каждый объект должен состоять из одной пары и выглядеть так:
{selector: '#call-[ИНДЕКС]'}
С каждой последующей итерацией цикла индекс увеличивается, пока не дойдет до 10-ти.
И все эти созданные в цикле объекты должны быть помещены в один общий массив.
Я написал вот это, но оно создает 10 объектов, каждое значение ключа в которых - 'call-10':

var a = $("span[id ^= call]"),
            b = {},
            c = [];
        for (var i = 0; i < a.length; i++) {
            b.selector = "#" + a.eq(i).attr("id");
            c.push(b);
        }


как все-таки сделать, чтобы в объект пушились не десять объектов со значением selector: 10 каждый, а чтобы по порядку?
  • Вопрос задан
  • 2533 просмотра
Решения вопроса 1
rockon404
@rockon404
Frontend Developer
Можно так:
const c = a.map((i, el) => ({ selector: `#${el.id}`}));


Ваш вариант не работал, потому что вы до цикла создали объект и каждую итерацию меняли значение его ключа selector и пушили в массив. В итоге у вас в массиве все элементы ссылаются на один и тот же объект.
Ваш вариант исправить можно так:
var a = $("span[id ^= call]"),
c = [];
for (var i = 0; i < a.length; i++) {
  let b = {
    selector:"#" + a.eq(i).attr("id"),
  };

  c.push(b);
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы