#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;
};