根据条件从数组中删除对象数组

时间:2019-10-24 03:02:45

标签: javascript arrays lodash

我有以下json数组,我需要根据以下条件进行过滤

例如:筛选并获取结果“ Attribute1”,其中包含“悲伤”

例如:筛选并获取结果,“ Attribute2”的“ SubAttribute1”包含“ tes”

所有的组合。
例如:筛选并获取结果“ Attribute1”,其中包含“ sad”
或“ Attribute2”的“ SubAttribute1”包含“ tes”
或“ Attribute3”的“ SubAttribute2”包含“ tes”

注意:可以通过纯JavaScript或lodash(首选)完成。

[
    {
        "Attribute1": [
            "sada",
            "dasa"
        ],
        "Attribute2": [{
            "SubAttribute1": "Test",
            "SubAttribute2": "sdasd"
        }, {
            "SubAttribute1": "sdsadsadas",
            "SubAttribute2": "sdsad"
        }],
        "Attribute3": [{
            "SubAttribute1": "sdasd",
            "SubAttribute2": "dsa"
        }, {
            "SubAttribute1": "sadasd",
            "SubAttribute2": "sadas"
        }]
    },
    {
        "Attribute1": [
            "ass",
            "sd"
        ],
        "Attribute2": [{
            "SubAttribute1": "dsad",
            "SubAttribute2": "xcxc"
        }, {
            "SubAttribute1": "erew",
            "SubAttribute2": "errer"
        }],
        "Attribute3": [{
            "SubAttribute1": "sdsdaasd",
            "SubAttribute2": "sdsa"
        }, {
            "SubAttribute1": "das",
            "SubAttribute2": "sad"
        }]
    }
]

1 个答案:

答案 0 :(得分:0)

您可以这样做:

const data = [{"Attribute1": ["sada","dasa"],"Attribute2": [{"SubAttribute1": "Test","SubAttribute2": "sdasd"}, {"SubAttribute1": "sdsadsadas","SubAttribute2": "sdsad"}],"Attribute3": [{"SubAttribute1": "sdasd","SubAttribute2": "dsa"}, {"SubAttribute1": "sadasd","SubAttribute2": "sadas"}]},{"Attribute1": ["ass","sd"],"Attribute2": [{"SubAttribute1": "dsad","SubAttribute2": "xcxc"}, {"SubAttribute1": "erew","SubAttribute2": "errer"}],"Attribute3": [{"SubAttribute1": "sdsdaasd","SubAttribute2": "sdsa"}, {"SubAttribute1": "das","SubAttribute2": "sad"}]}]

/**
  Combination of all.
  eg: Filter and get result "Attribute1" which contains "sad"
  OR "SubAttribute1" of "Attribute2" contains "tes"
  OR "SubAttribute2" of "Attribute3" contains "tes"
 */
const result = data.filter(
  obj => /sad/.test(obj.Attribute1.join(','))
    || obj.Attribute2.find(obj => /tes/.test(obj.SubAttribute1))
    || obj.Attribute3.find(obj => /tes/.test(obj.SubAttribute2))
)

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