Ввод нового значения в массив, стирающий старое

#javascript #arrays

Вопрос:

Я пытаюсь добавить новое значение в массив и хочу сохранить старое, но старое значение стирается с помощью приведенного ниже кода.

 let abText = (text) => {
  let query = [];
  let a = text.map(
    (script) => {
     let value = createFromMethod(script);
     query = {...query, value};
    }
  );
  console.log(query);
  return query;
};
 

createFromMethod будет возвращать объект каждый раз
при повторении карты, и мне нужно вернуть все эти объекты в виде массива объектов.

Что не так в моем коде?

Комментарии:

1. вы инициализируете свой массив (пусть query = [];) внутри метода. Он должен быть снаружи.

2. Что должна делать эта линия query = {...query, query}; ? Также, что такое использование value переменной?

3. @HassanImam Мой плохой, обновил строку

4. (1) кроме того, query = {...query, query} это создаст query объект, а не массив, и (2) запах кода позволяет изменять внешние данные внутри map()

5. Кроме того, вы инициализируете query как массив, а затем внутри array#map него преобразуете его в объект. Что это должно быть?

Ответ №1:

Предполагая, что я понимаю вопрос — что не очень вероятно, и что createFromMethod просто возвращает какой-то объект, вы хотите поместить каждый из этих объектов в массив, который возвращается abText .

В этом случае строка 6 перепутана.

Изменить строку 6 с query = {...query, value}; на query = [...query, value];

  • Это потому что query = {...[1,2,3], 5} => error missing ":" token
  • и query = [...[1,2,3], 5] => result: [1,2,3,5]

Комментарии:

1. Для целей тестирования я заявил createFromMethod следующее: createFromMethod = txt => {return {test:txt}};

Ответ №2:

 const query = [];

let abText = (text) => {

    text.map(script => createFromMethod(script)).forEach(obj => query.push(obj));

    return query;

};
 

или

 const query = [];

let abText = (text) => {

    const newObjs = text.map(script => createFromMethod(script));

    query = [...query, ...newObjs];

    return query;
};