如何使用Javascript对对象进行深度过滤

克里希纳泰哈

我有一个不确定对象的多级对象,例如,我有一个后续对象

[{
        "id": "1234",
        "desc": "sample1",
        "items": [{
            "item1": "testItem1",
            "item2": "testItem2"
        }]
    },
    {
        "id": "3456",
        "desc": "sample2",
        "items": [{
            "item1": "testItem12",
            "item2": "testItem23"
        }]
    }
]

我们如何在纯JavaScript中深度搜索字符串,以便如果搜索字符串与上述对象中的任何值匹配,则应返回其各自的对象级别。

例如,如果我搜索“样本”,则应返回两个对象,如果我搜索“ 1234”,则应仅返回一个对象。有没有一种方法可以在不传递要搜索的键和值对的情况下搜索字符串?搜索字符串可以在对象中的任何位置。请帮助我的逻辑。

可以说,如果我使用“ sample”或“ testItem1”进行搜索,则应同时返回两个父级的对象,如果我搜索“ testItem23”,则应返回父级的第二个完整对象水平。

戈戈伦

这是一个简单的迭代方法,使用堆栈来遍历结构并构建结果数组:

const find = (needle, haystack) => {
  const result = [];
  const stack = [[haystack, haystack]];

  while (stack.length) {
    const [curr, parent] = stack.pop();

    for (const o of curr) {
      for (const k in o) {
        if (Array.isArray(o[k])) {
          stack.push([o[k], o]);
        } 
        else if (o[k].includes(needle)) {
          result.push("items" in o ? o : parent);
        }
      }
    }
  }

  return result;
};

const data = [{
    "id": "1234",
    "desc": "sample1",
    "items": [{
      "item1": "testItem1",
      "item2": "testItem2"
    }]
  },
  {
    "id": "3456",
    "desc": "sample2",
    "items": [{
      "item1": "testItem12",
      "item2": "testItem23"
    }]
  }
];

console.log(find("sample", data));
console.log(find("1234", data));
console.log(find("testItem12", data));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用jQuery或JavaScript对对象数组进行排序

如何使用集合对对象的属性进行排序

如何使用Java 8流对对象进行排序

如何使用新值对对象进行JSON编码?

角度过滤器:如何进行预过滤,以便角度过滤器仅考虑整个数据对象的一部分

Spock Framework是否可以对对象进行深度比较?

如何在javascript中对对象数组进行排序?

如何使用JavaScript根据日期键对对象数组进行排序?

分层对象中的深度过滤

如何按纬度过滤SF对象?

如何在javascript中对对象元素进行分组

如何使用Vanilla或lodash对对象数组进行排序

当使用日志配置对对象进行深度复制时,出现“ TypeError:无法使线程锁定对象腌制”

如何基于键对对象的JavaScript数组进行分组

代码审查:使用Javascript简洁地对对象进行深层过滤

如何使用多图对对象进行排序?

javascript / lodash:由于子树对象,如何对对象进行递归深度获取

按对象对对象数组进行角度过滤

如何使用powershell按键对对象进行排序

如何深度过滤对象(不是对象数组)

使用 JavaScript 对对象数组进行排序

如何使用lodash对对象数组中的属性进行分组?

如何使用 lodash javascript 对对象中的数组数据进行分组

使用 JavaScript 对对象进行排序和数组

如何使用javascript根据创建日期按升序对对象数组进行排序并做出反应?

如何使用对象的键值对对象进行排序

如何使用rxjs以角度过滤对象数组

如何根据键对对象的javascript数组进行排序

如何通过基于特定字段值对对象进行分组来过滤 javascript 对象数组?