如何在不使用for
循环或map
,reduce
之类的任何数组方法的情况下,检查元素是否存在于数组中?
let numList= [1,2,3,6,9,2,-8,20];
我想检查9和30,如果不存在则不使用for
循环或任何数组方法
答案 0 :(得分:7)
我想一个选择是将数组转换为Set
并检查Set.has
:
let numList= [1,2,3,6,9,2,-8,20];
const set = new Set(numList);
console.log(set.has(9));
console.log(set.has(30));
检查Set
是否具有元素的复杂度为O(1)
,这比任何数组方法或for
循环(O(N)
或{ {1}},所以当您有一个非常大的数组并且想要检查它是否具有某些元素时,首先将其转换为O(log N)
是一个好主意。
答案 1 :(得分:1)
您可以使用JSON.stringify将数组转换为字符串,并使用String includes检查字符串是否包含特定的搜索值
let numList = [1, 2, 3, 6, 9, 2, -8, 20];
let m = JSON.stringify(numList)
console.log(m.includes(-8))
答案 2 :(得分:1)
如果可以使用while循环,则可以实现二进制搜索。由于是面试问题,如果这符合他们的需求,我不会感到惊讶。
这是伪代码中的传统算法,是从Rosetta Code借来的
/* gets a string */
printf("Enter the string: ");
scanf("%s", s);
/* finds length of the string */
while(s[size]!='\0')
{
size++;
}
/* sorts the elements of the string using bubble sort */
for(j=0; j<size-1; j++)
{
for(i=0; i<(size-1-i); i++)
{
if(s[i]>s[i+1])
{
temp=s[i];
s[i]=s[i+1];
s[i+1]=temp;
}
}
/* displays pass by pass output */
printf("\nIteration %d\n", j+1);
printf("%s\n", s);
}
return 0;