Javascript过滤两个数组

标签 javascript arrays

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

所以,我们有一个数组 -

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/

相关文章:

javascript - 使用 Puppeteer.js 截取 URL 列表的屏幕截图

javascript - ajax 调用后多选不起作用

c++ - 从数组中抽取非重复随机元素的有效算法

python - 将不同列长度的 numpy 矩阵的条目放入一维数组中

java - 获取具有目标总和的数组子集的算法无法正常工作

javascript - 复制数组时 slice() 的奇怪问题

javascript - 在 ChartJS 上仅显示整个单位

javascript - 为什么当数组包含 RegExp 时,数组的 toString() 方法返回空字符串?

javascript - VueJS 拖动元素有时会导致其粘在鼠标指针上

java带有数组和int的新构造函数