JavaScript:在数组中查找具有数组子字符串的所有值

标签 javascript object filter include indexof

我有两个数组;一个带有子字符串,另一个带有对象。

我想获得一个对象数组,其中这些对象包含子字符串数组中的任何子字符串。

到目前为止,我已经尝试使用filterfindIndex。如果子字符串相同,则每种方法都有效。在这种情况下,甚至 indexOf 也不起作用。我不是 JavaScript 专家,所以可能我做错了什么。

脚本

  var strings = ['12', 'sv', 'eli', '23', '34'];

  var data = [
    {
      a: 349531284734,
      b: "sv123eippppppeli",
      c: "aaabbbccc"
    },
    {
      a: 1111123333312,
      b: "ccccccccccccs2222",
      c: "aaabbbccc"
    },
    {
      a: 2222234,
      b: "elllllllla",
      c: false
    },
  ];


  // attempt 1

  var results = data.filter(arr =>
    Object.keys(arr).some(key => {
      return String(arr[key]).toLowerCase().includes(strings) // or indexOf
    })
  );


  // attempt 2 with only one data index

  var obj = Object.values(data[0]);
  var results = strings.some(s => obj.includes(s)) // or indexOf or findIndex;

解释

在这个给定子串的例子中,只有 data[0] 是匹配的,因为它至少包含 strings 数组中的一个子串。

如何在不使用“for 循环”的情况下完成这项工作?

谢谢

最佳答案

一个避免需要“for-loop”语法的简单解决方案是 filter() data 的每个对象通过一个谓词检查是否有任何值 (当前正在过滤的项目)包含 strings 数组的任何一个值。

在代码中,这可以表示为:

var strings = ['12', 'sv', 'eli', '23', '34'];

var data = [{
    a: 349531284734,
    b: "sv123eippppppeli",
    c: "aaabbbccc"
  },
  {
    a: 1111123333312,
    b: "ccccccccccccs2222",
    c: "aaabbbccc"
  },
  {
    a: 2222234,
    b: "elllllllla",
    c: false
  },
];

// Local helper retruns true if case-insenstive value in strings array
const stringHasValue = (value) => strings
  .some(str => value.toLowerCase().includes(str.toLowerCase()))

// Filter each item in data array by existance of a value containing
// substring in strings array
var result = data.filter((item) => Object.values(item)
  .filter(value => typeof value === 'string')
  .some(stringHasValue, []));

console.log(result);

关于JavaScript:在数组中查找具有数组子字符串的所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58227707/

相关文章:

JavaScript 嵌套函数交叉引用

javascript - 如何将内部 div 居中?

javascript - 将嵌套数组值映射到 Map,具有按数组索引设置 Map 值的功能,这将通过引用反射(reflect)在嵌套数组中

javascript - 访问对象对象中的特定对象

php - preg_replace删除Youtube和Vimeo对象并嵌入链接

java - 这个 LocalThread 会覆盖其他 Servlet 请求的数据吗?

javascript - 浏览器在扫雷克隆中报告 "too much recursion"

javascript - jQuery:查找被单击对象的父级中选中的子级的数量

filter - 在tasklist.exe中过滤不带通配符?

javascript - 按多个键过滤 JSON 数据