Добавление нового объекта в массив создает дубликаты [duplicate]

Вы должны использовать функцию zip '. Вот пример, как ваша собственная функция zip может выглядеть как

def custom_zip(seq1, seq2):
    it1 = iter(seq1)
    it2 = iter(seq2)
    while True:
        yield next(it1), next(it2)

10
задан pat 7 June 2012 в 14:15
поделиться

3 ответа

Проблема заключается не в методе push для Array.prototype, а в ваших привязках. Вы изменяете один и тот же объект s на каждой итерации вашего блока async.foreach, который на самом деле является тем же объектом, что и ранее определенный Subscriber.

Сначала вы должны перенести объявление s переменная к блоку foreach.

А также, если вы хотите создать объект со значениями по умолчанию, он должен быть function, который возвращает новый объект:

function Subscriber() {
  return {
    'userID':   '',
    'email':    '',
    'name':     '',
    'stage':    '',
    'poster':   false,
    'canEmail': false,
    'stage':    ''
  };
};

И тогда вы можете создать экземпляр объекта Subscriber следующим образом:

var s = Subscriber();

Подробнее см. этот ответ или Закрытие на MDN .

15
ответ дан Community 27 August 2018 в 00:49
поделиться

Вы должны копировать подписчика каждый раз. В противном случае вы каждый раз изменяете один и тот же объект. Просто используйте s = copy(Subscriber)

-1
ответ дан Dmitry Laptev 27 August 2018 в 00:49
поделиться

Клонирование объекта перед вводом в массив также решает проблему.

temp = clone(s);
subscribers.push(temp);

Получить https://www.npmjs.com/package/clone

0
ответ дан Misa Lazovic 27 August 2018 в 00:49
поделиться
Другие вопросы по тегам:

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