Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript:在数组中查找具有数组子字符串的所有值_Javascript_Object_Filter_Include_Indexof - Fatal编程技术网

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

JavaScript:在数组中查找具有数组子字符串的所有值,javascript,object,filter,include,indexof,Javascript,Object,Filter,Include,Indexof,我有两个数组;一个带有子字符串,另一个带有对象 我想获得一个对象数组,其中这些对象包含子字符串数组中的任何子字符串 到目前为止,我已经尝试使用过滤器和findIndex。如果子字符串相同,则每种方法都有效。在这种情况下,即使是indexOf也不起作用。我不是javascript的家伙,所以我可能做错了什么 脚本 var strings = ['12', 'sv', 'eli', '23', '34']; var data = [ { a: 349531284734,

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

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

到目前为止,我已经尝试使用
过滤器
findIndex
。如果子字符串相同,则每种方法都有效。在这种情况下,即使是
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;
解释

在此示例中,对于给定的子字符串,只有
数据[0]
是匹配项,因为它至少包含
字符串
数组中的一个子字符串

如果不使用“for循环”,我如何使其工作


感谢

避免使用“for循环”语法的一个简单解决方案是,通过检查(正在筛选的当前项的)任何值是否包含
字符串
数组的任何一个值的谓词对
数据
的每个对象进行
筛选()

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

var strings=['12','sv','eli','23','34'];
风险值数据=[{
a:349531284734,
b:“sv123eippppeli”,
c:“aaabbccc”
},
{
a:11111333312,
b:“中交S2222”,
c:“aaabbccc”
},
{
a:22234,
b:“嗯”,
c:错
},
];
//如果字符串数组中的case insistive值为true,则本地帮助程序将运行true
常量stringHasValue=(值)=>字符串
.some(str=>value.toLowerCase()。包括(str.toLowerCase())
//按包含的值的存在筛选数据数组中的每个项
//字符串数组中的子字符串
var结果=data.filter((项)=>Object.values(项)
.filter(值=>typeof值===“字符串”)
.部分(stringHasValue,[]);

控制台日志(结果)给定输入的预期输出是什么?它需要返回匹配的对象。所以,若数据包含数组中的字符串,它需要返回。如果子字符串是
['aa',bb']
并且对象是
{a:1,b:oo,c:aabb}
,它需要返回该对象。尽管如此,String.prototype.includes仍希望参数是另一个字符串,而不是数组strings@Taplar包括也应该起作用,正如Dacre Denny在回答中所证明的那样。@Taplar啊,是的。很抱歉我的错误太棒了。我很接近,但不是那么接近。再次感谢。您的代码唯一的问题是,如果我在输入类型上创建子字符串数组,并且在创建启动您的代码之后,它会以某种方式重置,并且忽略旧的值
var strings=this.value.toLowerCase().split(“”).filter(Boolean)
但我认为这有点离题。