Правило vue.js & airbnb no-param-reassign lint - Как изменить свойства в массиве объектов? - PullRequest
0 голосов
/ 12 октября 2018

Я использую vue-cli и принял правила по умолчанию ESLint, включая no-param-reassign, которые я никогда раньше не использовал.

У меня есть метод, который должен:

  1. принять массив columnDefinition объектов

  2. Перебрать объекты и назначить каждому из них columnDefinition.originalOrder число

  3. Изменить порядок& вернуть массив.

no-param-reassign продолжает выдавать ошибки, если я не использую lodash для создания нового массива новых объектов и возврата этого.

Так, например, я передаюв

                [
                    {
                        label: 'Number of Siblings',
                        searchEnabled: false,
                        sortEnabled: false,
                        newOrder: 3,
                        lotsOfNestedData: {
                            moreNesting: 'etc',
                        },
                    },
                    {
                        label: 'Pet Name',
                        searchEnabled: false,
                        sortEnabled: false,
                        newOrder: 1,
                        lotsOfNestedData: {
                            moreNesting: 'etc',
                        },
                    },
                    {
                        label: 'Favorite Hobby',
                        searchEnabled: false,
                        sortEnabled: false,
                        newOrder: 4,
                        lotsOfNestedData: {
                            moreNesting: 'etc',
                        },
                    },
                    {
                        label: 'Favorite Outfit',
                        searchEnabled: false,
                        sortEnabled: false,
                        newOrder: 2,
                        lotsOfNestedData: {
                            moreNesting: 'etc',
                        },
                    },
                ]

Без этого правила я бы .each просматривал массив и мутировал объекты со свойством item.originalOrder = idx.Затем измените массив с помощью .sort на основе newOrder.

С правилом отсутствия мутирующих параметров лучше всего придумать создание нового массива (чтобы я мог его отсортировать), а затем создатьклоны каждого объекта, к которому я могу добавить свойство .originalOrder.

const newSrcArray = _.map(srcArray, (item, idx) => {
    const newItem = _.cloneDeep(item);
    newItem.originalOrder = idx;
    return newItem;
});

//sort newSrcArray

return newSrcArray;

Это похоже на дополнительный код и память, но я что-то упустил полностью?

Является ли этот шаблон / память предпочтительным способом сделать это?

Илилучшая практика просто выключить правило?

1 Ответ

0 голосов
/ 16 октября 2018

Официальный ответ на форуме vue.js vue

: «У самого проекта Vue нет мнения по этому поводу».

Так чтоответ на первоначальный вопрос - вариант 2: не рекомендуется оставлять правило Vue включенным.

...