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
。
我有一个方法需要:
接受 columnDefinition
个对象的数组
遍历对象并为每个对象分配一个 columnDefinition.originalOrder
编号
重新排序 & 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 最佳实践。
我正在使用 vue-cli 并接受了 ESLint 默认规则,包括我以前从未使用过的 no-param-reassign
。
我有一个方法需要:
接受
columnDefinition
个对象的数组遍历对象并为每个对象分配一个
columnDefinition.originalOrder
编号重新排序 & 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 最佳实践。