智能数组过滤JS

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了智能数组过滤JS相关的知识,希望对你有一定的参考价值。

我有一个非常有趣的任务要做,但最终得到了错误的代码。它变异了我想避免的初始数组。

这里是一个数组示例:

[
{
ID: "some id",
NAME: "some name",
PROPERTIES:
    [
        {
            TYPE: [{UF_NAME: "some type name"}]
        },
        {
            OTHER_TYPE:
                [
                    {UF_NAME: "some other type name"},
                    {UF_NAME: "some other type name"},
                ]
        },
        ...
    ],
...
OFFERS:
    [
        {
            ID: "some id",
            NAME: "some name",
            PROPERTIES:
                [
                    {
                        SIZE: [{UF_NAME: "some type name"}]
                    },
                    {
                        COLOR:
                            [
                                {UF_NAME: "some color 1"},
                                {UF_NAME: "some color 2"},
                            ]
                    },
                    ...
                ],
        },
        {
            ID: "some id",
            NAME: "some name",
            PROPERTIES:
                [

                ]
        },
        ...
    ]
},
...

]

这是不改变初始数组我将要实现的结果:

[
{
ID: "some id",
NAME: "some name",
PROPERTIES:
    [
        {
            TYPE: [{UF_NAME: "some type name"}]
        },
        {
            OTHER_TYPE:
                [
                    {UF_NAME: "some other type name"},
                    {UF_NAME: "some other type name"},
                ]
        },
        ...
    ],
...
OFFERS:
    [
        {
            ID: "some id",
            NAME: "some name",
            PROPERTIES:
                [
                    {
                        SIZE: [{UF_NAME: "some type name"}]
                    },
                    {
                        COLOR:
                            [
                                {UF_NAME: "some color 1"},
                                {UF_NAME: "some color 2"},
                            ]
                    },
                    ...
                ],
        }
    ]
}

]

过滤器应该做什么:

  1. 在对象属性中进行整个数组搜索values并提供属性
  2. 返回带有筛选商品的初始数组的新副本

数组结构:

产品1-报价11-报价12-优惠13

产品2-报价21-报价22-优惠23

产品3-报价31-报价32-优惠33

过滤后的数组结构:

产品1-优惠11

产品2-优惠23

产品3-优惠31

这是我的职能:

function filter (array, filter) {
        return array.filter(function iter(o) {
            return Object.keys(o).some(function (k) {
                if (typeof o[k] === 'string' && o[k].indexOf(filter) !== -1) {
                    return true
                }
                if (Array.isArray(o[k])) {
                    o[k] = o[k].filter(iter)
                    return o[k].length
                }
            })
        })
    }
答案

您需要重写代码,以避免使用嵌套过滤器和重新分配属性。

以上是关于智能数组过滤JS的主要内容,如果未能解决你的问题,请参考以下文章

为什么我不能在此片段中生成唯一对象数组?

几个关于js数组方法reduce的经典片段

几个关于js数组方法reduce的经典片段

JS常用代码片段-127个常用罗列-值得收藏

web代码片段

Vue JS按多个数组对象项过滤