我正在尝试使用自定义函数对对象数组进行排序。
因此,我定义了函数
sortingAlgo = (a, b) => {
// we need to use custom sorting algorithm to meet our requirements.
a.pos = a.pos.toUpperCase();
b.pos = b.pos.toUpperCase();
if(a.pos.slice(0, 1) === b.pos.slice(0, 1)) {
if (parseInt(a.pos.slice(1)) < parseInt(b.pos.slice(1))){
return -1;
}
if (parseInt(a.pos.slice(1)) > parseInt(b.pos.slice(1))){
return 1;
}
return 0;
} else {
if (parseInt(a.pos.slice(0, 1)) < parseInt(b.pos.slice(0, 1))){
return -1;
}
if (parseInt(a.pos.slice(0, 1)) > parseInt(b.pos.slice(0, 1))){
return 1;
}
return 0;
}
}
我这样称呼它。
const sortedProducts = data.data.sort(this.sortingAlgo);
现在我得到了Eslint错误的提示。
**
**
我搜索发现此规则是由airBnB设置的。因此,我认为禁用此规则的权利不成立。
所以有人可以告诉我如何解决它,或者禁用此规则是否可以。
答案 0 :(得分:1)
无需重新分配函数参数(pos
)的a, b
属性。您应该只分配一个新变量(aPos, bPos
),这是一种最佳实践,因此也是ESLint抱怨的原因。
您应该在代码中尽可能避免不必要的mutations/side-effects,以防止错误并创建总体上更高效的程序体系结构。
在这种情况下更具体..
ESLint: Disallow Reassignment of Function Parameters (no-param-reassign)
const sortingAlgo = (a, b) => {
// we need to use custom sorting algorithm to meet our requirements.
let aPos = a.pos.toUpperCase(),
bPos = b.pos.toUpperCase();
if (aPos.slice(0, 1) === bPos.slice(0, 1)) {
if (parseInt(aPos.slice(1)) < parseInt(bPos.slice(1))) {
return -1;
}
if (parseInt(aPos.slice(1)) > parseInt(bPos.slice(1))) {
return 1;
}
return 0;
} else {
if (parseInt(aPos.slice(0, 1)) < parseInt(bPos.slice(0, 1))) {
return -1;
}
if (parseInt(aPos.slice(0, 1)) > parseInt(bPos.slice(0, 1))) {
return 1;
}
return 0;
}
}
答案 1 :(得分:1)
您将ESLint配置为不允许重新分配参数,即,如果一个函数接受2个参数(a,b),则您不能在函数体内重新分配这2个变量。
要解决此错误,请执行以下任一操作
: sortingAlgo = (a, b) => {
// we need to use custom sorting algorithm to meet our requirements.
const aPos = a.pos.toUpperCase();
const bPos = b.pos.toUpperCase();
...
然后将对a.pos
和b.pos
的引用替换为aPos
和bPos
。