В настоящее время я работаю над проектом и придумал два разных набора кодов, и мне было интересно, есть ли разница между ними.
ReactJS (последняя версия)
1.
columns.map(v => v.aggregate = (values) => values[0]);
2.
columns = columns.map( v => ({
...v,
aggregate : (values) => values[0]
}))
Ожидаемый результат:
const columns = [
{
Header: 'ID',
accessor: 'empid',
shown: true,
width: 130
}, {
Header: 'Name',
accessor: 'name',
shown: true,
aggregate: (values) => values[0],
width: 130
}, {
Header: 'Age',
accessor: 'age',
shown: true,
aggregate: (values) => values[0],
}, {
Header: 'Email',
accessor: 'email',
shown: true,
aggregate: (values) => values[0],
width: 150
}, {
Header: 'Birthday',
accessor: 'birthday',
shown: true,
aggregate: (values) => values[0],
width: 150
}
];
Я добавлю это в компонент ReactTable с сводной агрегацией по идентификатору.
Спасибо @CertainPerformance за ответ!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


В первом примере вы напрямую изменяете каждый объект. Во втором примере вы сначала используете оператор распространения, поэтому сначала вы поверхностно копируете каждый объект, а не напрямую его мутируете.
Спасибо @JackBashford за ответ!
Учитывая ожидаемый результат, два подхода будут делать одно и то же без проблем? Как насчет производительности или эффективности?
Второй вариант менее эффективен, потому что он копирует объект, поэтому для очень больших массивов (тысячи) лучше использовать первый вариант.
Потрясающий! Еще раз спасибо, сэр. Будьте здоровы!
@ randyk69 randyk69 и для еще большей эффективности вы не должны использовать map, когда не хотите создавать новый массив. Просто напишите цикл for (const v of columns). А для еще большей эффективности не создавайте повторно много функций, а просто назначьте их всем объектам: function aggregate(values) { return values[0] } for (const v of columns) v.aggregate = aggregate;.
Спасибо @Bergi за ваш вклад. Отмечено на это.
Один мутирует существующие объекты в массиве, другой нет.