Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 如何找到与某个条件匹配的前n个数组项,而不在整个数组中循环_Javascript_Arrays - Fatal编程技术网

Javascript 如何找到与某个条件匹配的前n个数组项,而不在整个数组中循环

Javascript 如何找到与某个条件匹配的前n个数组项,而不在整个数组中循环,javascript,arrays,Javascript,Arrays,我试图在一个非常大的数组中找到匹配某个条件的前100个项,为了效率起见,我希望在找到这100个项后结束循环,因为匹配项的方法很昂贵 问题在于: const results=largeArray.filter(item=>checkItemValidity(item)).slice(01100); 将在返回前100个之前在大数组中找到所有结果,这对我来说太浪费了 这样做: const results=largeArray.slice(01100).filter(item=>checkItemVa

我试图在一个非常大的数组中找到匹配某个条件的前100个项,为了效率起见,我希望在找到这100个项后结束循环,因为匹配项的方法很昂贵

问题在于:

const results=largeArray.filter(item=>checkItemValidity(item)).slice(01100);
将在返回前100个之前在大数组中找到所有结果,这对我来说太浪费了

这样做:

const results=largeArray.slice(01100).filter(item=>checkItemValidity(item));
可能返回少于100个结果


请问最有效的方法是什么?

最有效的方法是对构造使用
,而不是函数,然后在达到极限时中断

const results = []
for (const item of largeArray) {
  // End the loop
  if(results.length === 100) break

  // Add items to the results
  checkItemValidity(item) && results.push(item)
} 

console.log(results)

你可以用这样的东西。即查找前5个奇数

var数据=[“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“11”、“12”、“13”、“14”]
变量filterData=[];
for(设i=0;ilog(filterData)
我将假设代价高昂的是用于过滤数组中项目的函数,而不是实际的迭代

在这种情况下,我建议使用array objects方法。在传递给它的函数中,可以检查累加器是否已经足够大。如果不是,那么您可以有条件地添加到它

const results=largeArray.reduce((累加器,项)=>{

如果(accumulator.length您需要执行一个标准的“for”循环,因为filter函数返回给定数组的一个新数组,所以下面是我的方法:

让largeArray=[“foo”,“bar”,“foo”,“bar”]
让validateArray=[“foo”]
让newArray=[]
用于(largeArray项目){
//将数字更改为所需的项目数
if(newArray.length==2){
console.log(newArray)
//输出将是[“foo”,“foo”]
打破
}
//如果您有一个自定义函数返回true或false,请在此处替换
如果(包括(项目)){
newArray.push(项目);
}
}

如果不返回字符串,则可能需要创建一个自定义函数来返回true或false,具体取决于如何定义验证数据有几种数组方法会提前退出
数组。有些方法会退出
数组。每个
数组。查找
数组。findIndex

您可以在需要时使用它们来停止迭代

使用
Array.find的示例

const data=[-1,-6,-6,1,-2,2,3,4,-5,5,6,7,-8,8,9,-10,10,11,-1,2,3,4,5,-6,7,8,-9,10,11,];
常量first10=[];
data.find(item=>(item>0&&first10.push(item),first10.length>=10));

console.log(first10+“”);
您可以获取一个生成器函数,并找到所需长度的出口

function*getFirst(数组,fn,n){
设i=0;
while(ix%2==0,
数组=[2,4,5,1,3,7,9,10,6,0];

log(…getFirst(array,expFn,4));
而不是在
for
循环中放置一个条件和
中断
,只需在
for
条件本身中添加额外的长度检查

const data=[“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“11”、“12”、“13”、“14”],
isValid=n=>!(n%2),
res=[],
最大值=5;
对于(设i=0;iconsole.log(res)
为什么不在循环中使用break?使用
for
循环并在有足够的结果时使用break。您可以在javascript中添加一个计数器。每次它找到符合您条件的项时,向计数器中添加+1。然后,一旦计数器达到100,停止循环。这不是完全重复,但一般的想法是从数组方法中中断:为什么
=
而不仅仅是
=
?一旦它
中断
s,它就再也不会出现了。是的,这也有效!只是个人偏好。更新为使用safe===它仍将循环到
数组。长度
,因为您只是在检查插入condition@Shubh是的,这是一个很好的观点