1

我有一个 Javascript 课程的作业,我必须计算每个特定类型的元素中有多少出现在数组中。该数组有 105 个元素长,并且只出现了数字 1、2、3、4 和 5。我必须计算有多少个 1、2、3 等。

当然,有一个简单的方法可以使用循环来做到这一点,但是我的老师在作业结束时添加了以下内容:

仅使用长度属性、toString()、sort() 和 indexOf() 方法。请不要循环或条件语句。

我不知道如何在不使用循环的情况下完成这项任务。非常感谢您能给我的任何帮助。谢谢!

4

3 回答 3

2

这将是答案:

var c=[1,2,3,4,5,2,3,4,5]
    c.sort()

    cout_of_1 = c.indexOf(2)-c.indexOf(1);
    cout_of_2 = c.indexOf(3)-c.indexOf(2);
    cout_of_3 = c.indexOf(4)-c.indexOf(3);
    cout_of_4 = c.indexOf(5)-c.indexOf(4);
    cout_of_5 = c.length-c.indexOf(5)+1;
于 2013-09-29T13:49:08.157 回答
1

由于这是一项任务,而您还没有真正尝试过,所以我只给您一些提示。

  • 对数组进行排序后,所有 1 将在数组的开头分组在一起,然后是所有 2,依此类推。
  • indexOf函数返回可以在数组中找到给定元素的第一个索引,如果不存在,则返回 -1。

给定排序数组中每个数字第一次出现的索引,您应该能够计算每个数字有多少。我不确定你是否需要toString()。你的教练可能会把它扔进去偷偷摸摸。

于 2013-09-29T13:49:17.223 回答
0

首先,对数组进行排序,然后获取下一个值的第一次出现。那就是你拥有的数字的数量,减去你已经拥有的数字。

var array = [1,2,5,3,2,4,5,2,1,3,3,4,5,6,2];
array = array.sort();

var ones = array.indexOf(2);
var twos = array.indexOf(3) - ones;
var threes = array.indexOf(4) - ones - twos;
...

但是,对于最后一个值 (5),没有要检查的下一个值。您可以通过检查长度并从中减去一个来解决此问题。

var fives = array.length - ones - twos - threes - fours;

请记住,这实际上是糟糕的代码,您应该使用循环。

于 2013-09-29T13:53:47.720 回答