【发布时间】:2020-04-28 17:53:46
【问题描述】:
我正在使用 React 框架并将 prop 传递给维护状态的组件。 prop 和 state 是对象数组,我想在我的代码中验证两者之间是否有任何变化。
somethingHasChanged = () => {
return !isEqual(this.props.array1.sort(), this.state.array1.sort());
};
数组中的对象定义如下:
array1: PropTypes.arrayOf(
PropTypes.shape({
id: PropTypes.string,
name: PropTypes.string,
label: PropTypes.string,
}),
),
id 可以在数组中的多个对象中重复,所以它不能唯一标识一个对象。名称和标签是 json 对象中的可选键,但不必指定。
现在我对两个数组进行排序,然后检查它们是否相等,但我看到了一些奇怪的行为。有时,当我期望两个数组相等时,它们是不同的,因为内容相同,但即使我在两者上都调用sort(),排序也不相同。是否有更好、更简单/更灵活的方法而不是进行深入比较?
【问题讨论】:
-
您认为它会如何在没有比较功能的情况下对它们进行排序?您是否尝试在网上搜索“js 比较对象数组”,因为无论如何您都需要自定义比较?有多种方法可以做到这一点;您可能需要根据您的特定要求、您已经在使用的库/模块等选择一个。
-
还需要在
isEqual中查看您在做什么。排序未按预期工作,因为排序函数不知道哪个对象更大或更小。 -
@user120242 isEqual 来自 lodash 库。但是我确实有一个问题。如果内容相同,为什么我的 prop 数组和 state 数组之间的排序会发生变化?我希望在调用
sort()结束时得到相同的结果。如果一个数组与另一个数组不同,这对我来说是有意义的,但在这种情况下(至少据我所知),两个数组是相同的 -
我会检查您的状态是否在从道具复制后被修改以及如何修改。可能想要实际控制台。注销这些值并比较它们。
标签: javascript arrays reactjs