我有一个代码使用lodash转换来重命名我可以使用的对象的键,
const replaceKeysDeep = (obj, keysMap) => {
return transform(obj, function(result, value, key){
const currentKey = keysMap[key] || key;
result[currentKey] = isObject(value) ? replaceKeysDeep(value, keysMap) : value;
});
};
我将上述实现更改为
const replaceKeysDeep = (obj, keysMap) => {
return transform(obj, (result, value, key) => {
const currentKey = keysMap[key] || key;
result[currentKey] = isObject(value) ? replaceKeysDeep(value, keysMap) : value;
});
};
const newKeys = {
abs: 'myname',
tyu: 'yourname'
};
const someObjectContainingKeys = {
abs: 'something',
tyu: 'somethingelse'
};
const finalTimePointCalc = replaceKeysDeep(someObjectContainingKeys, newKeys);
实现被更改,因为eslint提示输入关键字“ function”,但现在它提示我分配功能参数的属性
在这里,我不想抑制ESLINT警告,但希望正确执行它。
请提出建议
答案 0 :(得分:1)
查看源代码后(trasnform()
调用baseForOwn()
实际上是由baseFor()
生成的createBaseFor()
),我相信没有机会同时满足这两个要求(消耗lodash的transform()
具有可读性,并满足eslint的no-param-reassign
)。
不同于Array.prototype.reduce
transform()
不允许您显式返回累加器(可以在createBaseFor()
代码中看到它)。
因此,解决方案很少:要么为transform()
编写自己的代码。或者,您可以按行/按文件/全局抑制eslint规则,以允许使用props: false
修改函数参数的属性(有关详细信息,请参见no-param-reassign
docs)