Javascript 检查一个对象中的所有数组是否等于另一个对象中的所有数组
所以我有这样一个数据结构:Javascript 检查一个对象中的所有数组是否等于另一个对象中的所有数组,javascript,arrays,data-structures,Javascript,Arrays,Data Structures,所以我有这样一个数据结构: formSubmissions: [ { ids: [1,2,3,4,5], genders: ["male", "female"], times: ["1day","3days"] }, ... ] 基本上,每次提交表单时,我都要检查从表单中的三个字段创建的对象是否等于formSubmissions数组中的任何内容。如果不是,我想将其附加到数组中 实现这一目标的最快方法是什么?我已经尝试了一些
formSubmissions: [
{
ids: [1,2,3,4,5],
genders: ["male", "female"],
times: ["1day","3days"]
},
...
]
基本上,每次提交表单时,我都要检查从表单中的三个字段创建的对象是否等于formSubmissions数组中的任何内容。如果不是,我想将其附加到数组中
实现这一目标的最快方法是什么?我已经尝试了一些其他的堆栈溢出解决方案,但没有效果
谢谢 下面是我在等待回复时想到的:
if (!(this.formData.some(el => el.voIds === submitted.voIds &&
el.genderList === submitted.genderList &&
el.times === submitted.times))) {
this.formData.push(submitted);
}
它似乎起作用了。关于如何改进,有什么建议吗?另一种解决方案,根据中接受的答案使用Lodash
if(!this.formData.some(elem=>..isEqual(elem,submitted))){
此.formData.push(已提交);
}
请注意,与其他Lodash实用程序一样,它作为一个独立的NPM包提供,因此您不必依赖于库的其余部分。如果您在NodeJ上,只需按对象的内容比较对象,
util.isDeepStreetQual()
可能很有用:
if(!this.formData.some(elem=>util.isdeepstrimequal(elem,submitted))){
此.formData.push(已提交);
}
但是请注意,如果不同对象的顺序不同,那么它们的数组值将不匹配。即使它起作用,如果对象的结构发生变化,看起来也很难维护,这就是为什么我建议为此使用函数。你完全正确。如果我希望它会改变,我会转向你的解决方案。但在目前,我认为它不会改变。