返回包含字符串的嵌套数组的最有效方法(JavaScript)
我想知道是否有一种基于匹配值而不是使用“forEach”或“for”循环访问嵌套数组的更有效方法 这就是我目前的情况:返回包含字符串的嵌套数组的最有效方法(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”,“@@@@@”]
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”等。。。使用映射
时不会出现这种情况。