智能数组过滤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"},
]
},
...
],
}
]
}
]
过滤器应该做什么:
- 在对象属性中进行整个数组搜索values并提供属性
- 返回带有筛选商品的初始数组的新副本
数组结构:
产品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的主要内容,如果未能解决你的问题,请参考以下文章