В чем разница между приведенными ниже кодами React? Какой из них наиболее эффективен или эффективен? Или они практически одинаковы?

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

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 26.06.2019 10:29

Спасибо @CertainPerformance за ответ!

randyk69 26.06.2019 10:39
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
2
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В первом примере вы напрямую изменяете каждый объект. Во втором примере вы сначала используете оператор распространения, поэтому сначала вы поверхностно копируете каждый объект, а не напрямую его мутируете.

Спасибо @JackBashford за ответ!

randyk69 26.06.2019 10:40

Учитывая ожидаемый результат, два подхода будут делать одно и то же без проблем? Как насчет производительности или эффективности?

randyk69 26.06.2019 10:42

Второй вариант менее эффективен, потому что он копирует объект, поэтому для очень больших массивов (тысячи) лучше использовать первый вариант.

Jack Bashford 26.06.2019 11:13

Потрясающий! Еще раз спасибо, сэр. Будьте здоровы!

randyk69 26.06.2019 13:50

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

Bergi 07.07.2019 14:39

Спасибо @Bergi за ваш вклад. Отмечено на это.

randyk69 18.07.2019 09:06

Другие вопросы по теме