Javascript函数确定数组元素是否已存在

Javascript function to determine if array element already exists

本问题已经有最佳答案,请猛点这里访问。

所以我写了一些代码,这些代码将生成10次介于1到20之间的随机数,将其添加到数组中,然后将其显示在表中。如果一个数字出现多次,它将在表中显示红色。我在创建一个函数时遇到了问题,这个函数将评估随机数,以确定它是否是随机的,并将其变为红色。任何帮助都非常感谢

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
var i;
        var myarray = new Array();



        document.writeln("<table>");
        document.writeln("<th> Index </th>");
        document.writeln("<th> Number </th>");

        for (i = 1; i <= 10; i++){

            //numberExists();

            var min = 1;
            var max = 20;
            var randomnum = Math.floor(Math.random() * (max - min + 1)) + min;
            var mynum = parseInt (randomnum );

            myarray[i] = mynum;


        document.writeln("<tr>");
        document.writeln("<td>" + i +"</td>");
        document.writeln("<td>" + myarray[i] +"</td>");
        document.writeln("</tr>");
        }

        document.writeln("</table>");

        //function numberExists(mynum, myarray){
            // Can't figure out the code that goes here
        //}


以下是如何测试mynum是否已经在myarray中,并相应地改变颜色:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
var i;
        var myarray = new Array();



        document.writeln("<table>");
        document.writeln("<th> Index </th>");
        document.writeln("<th> Number </th>");

        for (i = 1; i <= 10; i++){



            var min = 1;
            var max = 20;
            var randomnum = Math.floor(Math.random() * (max - min + 1)) + min;
            var mynum = parseInt (randomnum );
            var color="black";
            if(myarray.indexOf(mynum) > -1){
            color="red";
            }      
            myarray[i] = mynum;


        document.writeln("<tr>");
        document.writeln("<td>" + i +"</td>");
        document.writeln("<td><font color="+color+">" + myarray[i] +"</td>");
        document.writeln("</tr>");
        }

        document.writeln("</table>");


编辑:如果您正在寻找一个实用的解决方案,请按照注释中的建议使用indexOf。如果您正在寻找正确的算法方法(这不需要线性查找时间,并且会导致渐进更快的算法),请遵循以下我最初的建议:

将数字存储为对象中的键。

1
2
3
4
5
6
7
8
9
10
11
var myNumbers = {};

...

myNumbers[mynum] = true; // add it to the object

if (myNumbers[mynum]) {
  console.log("The number has already been added");
} else {
  console.log("This is a new number");
}