使用Javascript计算数组中的元素数

时间:2013-09-29 13:35:56

标签: javascript arrays sorting count tostring

我有一个Javascript课程的作业,我必须计算每个特定类型的元素在阵列中出现的数量。数组长度为105个元素,只出现数字1,2,3,4和5.我必须计算1个,2个,3个等的数量。

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

  

仅使用length属性,toString(),sort()和indexOf()方法。请不要循环或有条件的陈述。

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

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:1)

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

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

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

答案 2 :(得分: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;

请记住,这实际上是错误的代码,应该使用循环。