如何判断一个对象是否是另一个 Array 对象的子集?

问题描述

提供一个对象,判断是否是另一个 Array 对象的子集

相关代码

提供一个对象:

{
    name: '张三',
    age: '12',
    sex: '男'
}

判断他是否是以下 Array 对象的子集:

[
    {
        name: '张一',
        age: '10',
        sex: '男'
    },
    {
        name: '张二',
        age: '11',
        sex: '男'
    },
    {
        name: '张三',
        age: '12',
        sex: '男'
    }
]
阅读 3.8k
3 个回答
var list = [
            {
                name: '张一',
                age: '10',
                sex: '男'
            },
            {
                name: '张二',
                age: '11',
                sex: '男'
            },
            {
                name: '张三',
                age: '12',
                sex: '男'
            }
        ];
        var child = {
            name: '张三',
            age: '12',
            sex: '男'
        };
        var status = false;//是否存在子集
        list.forEach(function( val , i ){
            if(JSON.stringify(child)===JSON.stringify(val)){
                status = true;
            }
        })
  • 如果提供对象和 Array 内的元素是浅拷贝的关系,直接使用 Array.prototype.indexOf 即可
  • 如果提供对象和 Array 内的元素是深拷贝的关系,那可以尝试看看元素是否具有唯一标识性的属性,比如 id 之类的,然后使用 Array.prototype.find 或者维护 hashmap 来检查
  • 如果不具备可唯一标识性的属性或者属性有多个,可以考虑使用 JSON.stringify 大法或者提供 toString 方法进行字面量对比

推荐lodash _.find

或者es6也很方便

array.some(i=>i.name===your.name)

所有字段都要比对的话:

array.some(i=>Object.keys(yourObject).every(key=>i[key]===yourObject[key]))
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题