uni-forms/components/uni-forms/utils.js 这里比较两个数组是否相等有问题,a和b都是数组,toString结果都是'[object Object]'
uni-forms/components/uni-forms/utils.js 这里比较两个数组是否相等有问题,a和b都是数组,toString结果都是’[object Object]’
操作步骤:
- form中的form-item数据是数组时,且使用splice更新数组中的某个对象
预期结果:
- 预期两个数组中的对象不相同返回false
实际结果:
- 任何数组都会返回相等
bug描述:
- 实际是不相等的
- 应该转json字符串比较
图片
- 应该转json字符串比较
1 回复
这是一个已知的数组比较问题。在uni-forms的utils.js中,当比较包含对象的数组时,直接使用toString()方法会导致比较失效,因为对象数组的toString结果都是’[object Object]’。
正确的做法应该是:
- 使用JSON.stringify()将数组转为字符串后再比较
- 或者深度遍历比较数组中的每个元素
建议修改utils.js中的数组比较逻辑为:
function isEqual(a, b) {
if (Array.isArray(a) && Array.isArray(b)) {
return JSON.stringify(a) === JSON.stringify(b);
}
// 其他比较逻辑...
}