Vue.js & airbnb no-param-reassign lint 规则 - 如何修改对象数组中的属性?

Vue.js & airbnb no-param-reassign lint rule - How to modify properties in array of objects?

我正在使用 vue-cli 并接受了 ESLint 默认规则,包括我以前从未使用过的 no-param-reassign

我有一个方法需要:

  1. 接受 columnDefinition 个对象的数组

  2. 遍历对象并为每个对象分配一个 columnDefinition.originalOrder 编号

  3. 重新排序 & return 数组。

no-param-reassign 一直出错,除非我使用 lodash 创建一个新对象数组并且 return 那。

例如,我传入

                [
                    {
                        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 属性 改变对象。然后根据 newOrder.

.sort 变异数组

使用无变异参数规则,我能想到的最好的办法是创建一个新数组(以便我可以对其进行排序),然后创建每个对象的克隆,然后我可以添加 .originalOrder 属性 到。

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

//sort newSrcArray

return newSrcArray;

这看起来像是额外的代码和内存,但我是不是完全遗漏了什么?

这是 boilerplate/memory 的首选方式吗?

或者最好的做法是关闭规则?

vue.js vue forum

上现在有官方答案

"The Vue project itself doesn’t have an opinion about it."

所以原始问题的答案是选项 2:保留 no-param-reassign 规则不是 Vue 最佳实践。