gpt4 book ai didi

javascript - 递归过滤具有不同属性的对象数组

转载 作者:行者123 更新时间:2023-12-01 02:25:12 30 4
gpt4 key购买 nike

我有一个带有其他数组的对象。我需要在主数组中匹配 RazaoSocial:"AAS"或 Produtos:[{Descricao:"AAS"}]

时进行过滤

这是我的代码:

var input = [
{
RazaoSocial: 'AAS',
Produtos: [
{ DescricaoProduto: 'XXX', id:12, other:"other text" },
{ DescricaoProduto: 'YYY', id:12, other:"other text" }
]
},
{
RazaoSocial: 'I found you',
Produtos: [
{ DescricaoProduto: 'AAS', id:12, other:"other text" },
{ DescricaoProduto: 'Miss8', id:12, other:"other text" },
{ DescricaoProduto: 'Miss8', id:12, other:"other text" },
{ DescricaoProduto: 'Miss8', id:99, other:"other text" }
]
},
{
RazaoSocial: 'bla',
Produtos: [
{ DescricaoProduto: 'AB', id:12, other:"other text" },
{ DescricaoProduto: 'CD', id:12, other:"other text" },
]
},
];

var res = input.filter(function f(o) {
if (o.RazaoSocial.includes("AAS")) return true
if (o.Produtos.DescricaoProduto) {
console.log(o.Produtos);
return (o.Produtos = o.Produtos.filter(f)).length
}
})
console.log(JSON.stringify(res, null, 2));

//结果

[
{
"RazaoSocial": "AAS",
"Produtos": [
{
"DescricaoProduto": "XXX",
"id": 12,
"other": "other text"
},
{
"DescricaoProduto": "YYYAAS",
"id": 12,
"other": "other text"
}
]
}
]

为什么带有“我找到你”的对象没有返回?我本来就很期待

[
{
RazaoSocial: 'AAS',
Produtos: [
{ DescricaoProduto: 'XXX', id: 12, other: "other text" },
{ DescricaoProduto: 'YYY', id: 12, other: "other text" }
]
},
{
RazaoSocial: 'I found you',
Produtos: [
{ DescricaoProduto: 'AAS', id: 12, other: "other text" },
{ DescricaoProduto: 'Miss8', id: 12, other: "other text" },
{ DescricaoProduto: 'Miss8', id: 12, other: "other text" },
{ DescricaoProduto: 'Miss8', id: 99, other: "other text" }
]
}
]

我尝试了其中的示例,但没有成功。 Recursively filter array of objects

我做错了什么?

感谢您的帮助。

最佳答案

最初尝试的主要问题是 if (o.Produtos.DescricaoProduto) {

o.Produtos 是一个数组,因此在没有先获取索引的情况下无法访问o.Produtos.DescricaoProduto

因此,由于 o.Produtos 是一个数组,我们可以像原始输入一样对其进行过滤。

我添加了递归和非递归方法,您可以进行比较。

递归解决方案是完全通用的,可以找到任何给定值。

var input = [
{
RazaoSocial: 'AAS',
Produtos: [
{ DescricaoProduto: 'XXX', id:12, other:"other text" },
{ DescricaoProduto: 'YYY', id:12, other:"other text" }
]
},
{
RazaoSocial: 'I found you',
Produtos: [
{ DescricaoProduto: 'AAS', id:12, other:"other text" },
{ DescricaoProduto: 'Miss8', id:12, other:"other text" },
{ DescricaoProduto: 'Miss8', id:12, other:"other text" },
{ DescricaoProduto: 'Miss8', id:99, other:"other text" }
]
},
{
RazaoSocial: 'bla',
Produtos: [
{ DescricaoProduto: 'AB', id:12, other:"other text" },
{ DescricaoProduto: 'CD', id:12, other:"other text" },
]
},
];

var useRecursive = true,
res;
if (useRecursive) {
var findValue = function (str) {
return function(o) {
return Object.values(o).filter(function (value) {
if (Array.isArray(value)) {
return value.filter(findValue(str)).length > 0
} else {
return value.toString().includes(str)
}
}).length > 0;
};
};
res = input.filter(findValue("AAS"))

} else {
res = input.filter(function f(o) {
if (o.RazaoSocial.includes("AAS")) return true
if (o.Produtos.length) {
return o.Produtos.filter(function(o1) {
return o1.DescricaoProduto.includes("AAS");
}).length;
}
})
}
console.log(JSON.stringify(res, null, 2));

关于javascript - 递归过滤具有不同属性的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48876567/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com