繁体   English   中英

检查 object 中的所有 arrays 是否等于另一个 ZA8CFDE6331BD59EB2AC96F8911ZC4B 中的所有 arrays

[英]Check if all arrays in an object are equal to all arrays in another object

所以我有一个这样的数据结构:

formSubmissions: [
    {
        ids: [1,2,3,4,5],
        genders: ["male", "female"],
        times: ["1day","3days"]
    },
    ...
]

基本上,每次提交表单时,我想检查从表单中的三个字段创建的 object 是否等于 formSubmissions 数组中的任何内容。 如果没有,我想把它 append 放到数组中。

最快的方法是什么? 我尝试了其他一些堆栈溢出解决方案无济于事。

谢谢!

如果您在 Nodejs 上,并且您只需要按内容比较对象, util.isDeepStrictEqual()会很有用:

if (!this.formData.some(elem => util.isDeepStrictEqual(elem, submitted))) {
    this.formData.push(submitted);
}

但请注意,如果它们的顺序不同,不同对象中的数组值将不匹配。

这是我在等待回复时想到的:

if (!(this.formData.some(el => el.voIds === submitted.voIds && 
                               el.genderList === submitted.genderList && 
                               el.times === submitted.times))) {
        this.formData.push(submitted);
      }

它似乎工作。 关于如何改进它的任何建议?

另一种解决方案,根据How to do a deep comparison between 2 objects with lodash?中接受的答案使用 Lodash _.isEqual()

if (!this.formData.some(elem => _.isEqual(elem, submitted))) {
    this.formData.push(submitted);
}

请注意,与其他 Lodash 实用程序一样,它可以作为独立的 NPM package 使用,因此您不必依赖库的 rest。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM