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字符串比较

图片

22 22

  • 应该转json字符串比较 22

1 回复

这是一个已知的数组比较问题。在uni-forms的utils.js中,当比较包含对象的数组时,直接使用toString()方法会导致比较失效,因为对象数组的toString结果都是’[object Object]’。

正确的做法应该是:

  1. 使用JSON.stringify()将数组转为字符串后再比较
  2. 或者深度遍历比较数组中的每个元素

建议修改utils.js中的数组比较逻辑为:

function isEqual(a, b) {
  if (Array.isArray(a) && Array.isArray(b)) {
    return JSON.stringify(a) === JSON.stringify(b);
  }
  // 其他比较逻辑...
}
回到顶部