如何比较两个对象数组并获取常见对象 [英] How to compare two array of object and get common objects

查看:66
本文介绍了如何比较两个对象数组并获取常见对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好我有两个数组

var elements = [{
        "id": "id_1",
        "type": "input",
        "businesstype": { "type": "text" }
    },
    {
        "type": "label",
        "id": "id_234"
    },
    {
        "id": "id_16677",
        "type": "div",
    },
    {
        "id": "id_155",
        "type": "input",
        "businesstype": { "type": "password" }
    }
]

var filterArray=[{type:'input',businesstype:{type:'text'}},{type:'div'}]

并想要像

var output = [{
        "id": "id_1",
        "type": "input",
        "businesstype": { "type": "text" }
    },
    {
        "id": "id_16677",
        "type": "div",
    }
]

如何比较这两个对象以获得来自el的相等对象ements。

How do I compare these two objects to get equal objects from elements.

推荐答案

您可以使用嵌套对象的递归方法对其进行过滤。

You could filter it with a recursive approach for the nested objects.

const isObject = o => o && typeof o === 'object',
      isEqual = (f, o) =>
          isObject(o) && Object.keys(f).every(k =>
              isObject(f[k]) && isEqual(f[k], o[k]) || o[k] === f[k]
          );

var elements = [{ id: "id_1", type: "input", businesstype: { type: "text" } }, { type: "label", id: "id_234" }, { id: "id_16677", type: "div" }, { id: "id_155", type: "input", businesstype: { type: "password" } }],
    filterArray = [{ type: 'input', businesstype: { type: 'text' } }, { type: 'div' }],
    result = elements.filter(o => filterArray.some(f => isEqual(f, o)));

console.log(result);

.as-console-wrapper { max-height: 100% !important; top: 0; }

这篇关于如何比较两个对象数组并获取常见对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆