Я использую следующую функцию для добавления индекса к каждому объекту массива, но все идентификаторы получают одинаковое значение, когда я проверяю console.info
var foo = [...this.props.articleList];
foo.forEach(function(row, index) {
row.id = index+1;
});
console.info(foo);
Я хочу что-то вроде этого =>
[{…}, {…}, {…}, {…}, id: 1], [{…}, {…}, {…}, {…}, id: 2], [{…}, {…}, {…}, {…}, id: 3]
но он возвращается
[{…}, {…}, {…}, {…}, id: 3], [{…}, {…}, {…}, {…}, id: 3], [{…}, {…}, {…}, {…}, id: 3]
на самом деле его данные json поступают из редуктора, я хочу установить только редуктор. в редукторе. вот код редуктора case types.SOMETHING: var foo = [... state.List, action.payload] foo.forEach (function (row, index) {row.index = index + 1;}); return {... state, List: foo}
Вы можете использовать array.map
следующим образом
var foo = [...this.props.articleList];
foo = foo.map(function(row, index) {
row.id = index+1
return row;
});
console.info(foo);
Попробуй это. Следующие два решения будут работать
const foo = [...this.props.articleList];
const articles = foo.map((row, index) => (
row.id = index+1;
));
console.info(articles);
Или
const foo = [...this.props.articleList];
const articles = foo.map((row, index) => {
return row.id = index+1;
});
console.info(articles);
Проблема, по-видимому, связана с обработкой foo
и последующим изменением row.id
мутационным способом.
Решение состоит в том, чтобы использовать стратегию, обычно называемую клонированием.
Для этого могут быть полезны такие инструменты, как синтаксис распространения и Array.prototype.map ().
См. Практический пример ниже.
case types.SOMETHING:
return {...state, List: [...state.List, action.payload].map((row, index) => ({...row, index}))}
Я предполагаю, что каждый объект в массиве на самом деле является ссылкой на тот же объект в памяти, можете ли вы опубликовать больше кода, чтобы у нас был минимальный воспроизводимый пример?