Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.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_Arrays_Ecmascript 6 - Fatal编程技术网

返回包含字符串的嵌套数组的最有效方法(JavaScript)

返回包含字符串的嵌套数组的最有效方法(JavaScript),javascript,arrays,ecmascript-6,Javascript,Arrays,Ecmascript 6,我想知道是否有一种基于匹配值而不是使用“forEach”或“for”循环访问嵌套数组的更有效方法 这就是我目前的情况: var a=[ [“aaa”,“111”,“!!!”], [“bbb”,“222”,“@@@@”], [“ccc”、“333”、“###”], [“ddd”、“444”和“$$”] ]; var b=“222”; var c; a、 forEach((aa)=>{ 如果(aa.包括(b))c=aa; }); //理想情况下,c将返回[“bbb”,“222”,“@@@@@”]

我想知道是否有一种基于匹配值而不是使用“forEach”或“for”循环访问嵌套数组的更有效方法

这就是我目前的情况:

var a=[
[“aaa”,“111”,“!!!”],
[“bbb”,“222”,“@@@@”],
[“ccc”、“333”、“###”],
[“ddd”、“444”和“$$”]
];
var b=“222”;
var c;
a、 forEach((aa)=>{
如果(aa.包括(b))c=aa;
});
//理想情况下,c将返回[“bbb”,“222”,“@@@@@”]

控制台日志(c)我假设您希望找到第一个包含指针的数组:

var a=[
[“aaa”,“111”,“!!!”],
[“bbb”,“222”,“@@@@”],
[“ccc”、“333”、“###”],
[“ddd”、“444”和“$$”]
];
功能搜索(干草堆、针){
返回haystack.find(item=>item.includes(针));
}

log(搜索(a,'222')取决于
a
及其内容更改的频率,以及您打算执行相关任务的频率。您可以使用过滤器,但过滤器本身会在引擎盖下执行for循环(如果我没有弄错的话)。var c=a.过滤器((aa)=>aa.包括(b));是否要查找与搜索匹配的第一个数组?@ASDFGerte内容不会经常更改,只要用户单击元素,任务就会运行。该元素中的一个值将针对数组运行以返回相关值。在这种情况下,您可以创建更适合搜索的数据结构。然而,如果它只发生在用户的点击上,那么这看起来像是过早的优化。只要循环一下,就可以了。一个典型的用户每秒点击次数不能超过8次,因此除非数据非常大,否则不会产生性能问题。OP要求提供最有效的方法。这是一种蛮力搜索,效率不高,因为对于这种类型的搜索,数据组织得不是很好。如OP所说,如果数据不经常更改,并且需要像这样定期搜索,那么应该建立一个更有效的数据结构,可能是所有数组中的所有项的
映射
,数组值作为键,它来自的数组作为值。然后,
Map
中的快速查找操作将告诉您它在哪个数组中。@jfriend00是的,但它比使用forEach循环所有值(即使找到了值,也会继续遍历每个元素)更有效。为什么要使用对象作为第二个选项(强制对键进行字符串转换)不是可以处理所有数据类型的
Map
?@jfriend00,因为帖子要求字符串。在某种程度上,普通对象比
Map
更好吗?普通对象已经存在某些属性名称冲突的问题,如“hasOwnProperty”、“valueOf”、“toString”等。。。使用
映射
时不会出现这种情况。