gpt4 book ai didi

Javascript过滤两个数组

转载 作者:行者123 更新时间:2023-12-03 04:35:21 25 4
gpt4 key购买 nike

所以我需要过滤数组以及该数组中的一个数组。

所以,我们有一个数组 -

arr: [
{
name: 'object',
array2: [
{
name: '1'
},
{
name: '2'
}
]
},
{
name: 'object 2',
array2: [
{
name: 'object'
}
]
}
]

我在过滤器中输入值 2,我想要的输出是 -

arr: [
{
name: 'object',
array2: [
{
name: '2'
}
]
},
{
name: 'object 2',
array2: []
}
]

我在这里有匹配的逻辑,它在外部级别(第一层,我有一个带有 name 和 array2 参数的对象)工作。内部关卡也可以工作,但这里的问题是,如果我过滤内部关卡,我无法恢复内部对象的初始状态。我有一个输入栏,如果我输入 2,它会被过滤得很好,但是,如果我删除 2,那么它会显示 arr: [] 中的其他元素,但不会显示 array2: [] 中过滤后的元素。

关于如何解决这个问题有什么想法吗?

链接到带有注释的 jsFiddle - http://jsbin.com/pupugoxebi/edit?html,js,output .

我可以手动推送新数组,但这不起作用,因为我有动态数组,例如,它可以有不同的属性,手动写入无法解决它。更新版本 - http://jsbin.com/bifolisefu/edit?html,js,output .

最佳答案

您可以使用 ceck 来获取外部数组的名称,或者检查内部数组是否返回一些项目,然后构建一个新对象并将其连接到结果集。

function getNodes(array, name) {
return array.reduce(function (r, a) {
var temp = a.array2.filter(b => b.name.includes(name));
return r.concat(
a.name.includes(name) || temp.length ?
Object.assign({}, a, { array2: temp }) :
[]
);
}, []);
}

var array = [{ name: 'test', foo: 0, array2: [{ name: 'test 2', foo: 1 }, { name: 'test 3', foo: 2 }] }, { name: 'test 2', foo: 3, array2: [{ name: 'test', foo: 4 }] }, { name: 'test 3', foo: 5, array2: [{ name: 'test 4', foo: 6 }, { name: 'test 5', foo: 7 }] }];

console.log(getNodes(array, '2'));
console.log(getNodes(array, '3'));
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于Javascript过滤两个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43325896/

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