indexOf在数组中行为不正确

时间:2017-11-28 20:49:01

标签: javascript html arrays loops

我正在尝试使用JS检查字符串中的大量字母,并将结果附加到div。它看起来像这样:

var string = "AABBCCDDEEEEEEEEEE";
var stringInput = document.getElementById("string");

function showMostChar() {
	var newInput = string.split("");
  var inputAsArray = Array.of(newInput);
  for (i = 0; i > inputAsArray; i++) {
  	if ((inputAsArray.indexOf("E")) > 9 ) {
   		stringInput.innerHTML = "E";	
    }
  }
}

window.onload = showMostChar;
<div id="string"></div>

简单来说,我希望按字符分割一个字符串,然后用它来创建一个数组。我循环遍历数组,如果E超过9(任意值),则将E放入div中。在我使用array()之前,我记得那不是一个有效的函数,so I did research并找到了Array.of(),但我没有看到任何附加到字符串div的内容。

  1. Array.of()是不是在此上下文中创建数组的正确方法?如果不是为什么?

  2. 理想情况是记录出现次数最多的字符总数,因此在此实例中EEEEEEEEEE。我需要以某种方式获取每个角色的价值并将它们相互比较,不知何故......类似于:

    for (i = 0; i > inputAsArray; i++) {
     // somehow compare values to each other? e being each instance
     // so, would that be a loop within a loop?
    if ((i.value()) > e ) {
        stringInput.innerHTML = i;  
        }
      }
    

1 个答案:

答案 0 :(得分:3)

您的代码中需要修复的内容很少:

  • 首先.split()将返回array,因此newInput是 已经是array,你不需要任何改造它。
  • 另一方面,创建新array的正确方法是 Array.from(),因为Array.of()需要Number 参数。
  • 第二件事你不需要任何循环来检查.indexOf(),你可以直接在newInput数组上调用它。
  • 并且它没有进入if块,因为.indexOf()将返回 数组中index的第一个E,低于9,I 在这里使用5进行测试。

这应该是你的代码:

function showMostChar() {
    var newInput = string.split("");
    if ((newInput.indexOf("E")) > 5 ) {
        stringInput.innerHTML = "E";    
    }
}

<强>演示:

var string = "AABBCCDDEEEEEEEEEE";
var stringInput = document.getElementById("string");

function showMostChar() {
  var newInput = string.split("");
  console.log(newInput);
  if ((newInput.indexOf("E")) > 5) {
    stringInput.innerHTML = "E";
  }
}

window.onload = showMostChar;
<div id="string"></div>

修改

要获取数组中E的出现次数,您可以使用Array.filter(),如下所示:

function getNumberOfOccurences(char) {
    var newInput = string.split("");
  return newInput.filter(function(c){
      return c === char;
  }).length;
}
console.log(getNumberOfOccurences("E"));

<强>演示:

var string = "AABBCCDDEEEEEEEEEE";
var stringInput = document.getElementById("string");

function getNumberOfOccurences(char) {
	var newInput = string.split("");
  return newInput.filter(function(c){
      return c === char;
  }).length;
}
console.log(getNumberOfOccurences("E"));