【问题标题】:Push index of characters in Array推入数组中的字符索引
【发布时间】:2016-10-12 10:23:58
【问题描述】:

我只是在玩 Javascipt 作为练习。我只想将字符串中每个空格的索引号推送到一个数组中。不过运气不好,我的数组是空的——或者是满是空格,我不确定是哪个。任何帮助都会被优雅地接受。 :)

function checkText() {
	var str1 = document.getElementById("texty").innerHTML;
	var dexArray = [];
	
	for (var i = 0; i < str1.length; i++) {
		if (str1.indexOf(str1[i]) === " ") {
		  dexArray.push(str1.indexOf(str1[i]));
		 }
	}
	alert(dexArray);
}
<p id="texty">Mary had a little lamb</p>
<button onclick="checkText()">Click</button>

【问题讨论】:

  • infexOf 将返回一个数字。 -1 用于其他人的不匹配和索引,但从不" "
  • indexOf 返回一个数字,永远不会等于空字符串

标签: javascript for-loop indexof


【解决方案1】:

您只需要检查i 位置的字符,如果找到则将其推送到结果中。

function checkText() {
    var str1 = document.getElementById("texty").innerHTML;
    var dexArray = [];
	
    for (var i = 0; i < str1.length; i++) {
        if (str1[i] === " ") {
            dexArray.push(i);
        }
    }
    console.log(dexArray);
}
<p id="texty">Mary had a little lamb</p>
<button onclick="checkText()">Click</button>

带有indexOf的版本。

function checkText() {
    var str1 = document.getElementById("texty").innerHTML,
        dexArray = [],
        i = str1.indexOf(' ');
	
    while (i !== -1) {
        dexArray.push(i);
        i = str1.indexOf(' ', i + 1); // change start postion for search
    }
    console.log(dexArray);
}
<p id="texty">Mary had a little lamb</p>
<button onclick="checkText()">Click</button>

【讨论】:

    【解决方案2】:

    这是因为您的if-conditionindexOf 返回一个number 而不是string,更不用说一个空格字符' '

    function checkText() {
    	var str1 = document.getElementById("texty").innerHTML;
    	var dexArray = [];
    	
    	for (var i = 0; i < str1.length; i++) {
    		  str1.charAt(i) == ' ' && dexArray.push(i);
    	}
    	alert(dexArray);
    }
    <p id="texty">Mary had a little lamb</p>
    <button onclick="checkText()">Click</button>

    【讨论】:

      【解决方案3】:

      您应该使用比较运算符===== 而不是indexOf

      ES6 版本

      function checkText() {
        var str1 = document.getElementById("texty").innerHTML;
        var dexArray = [];
        Array.from(str1).forEach((x,i)=>{x === " " && dexArray.push(i) });
        console.log(dexArray);
      }
      <p id="texty">Mary had a little lamb</p>
      <button onclick="checkText()">Click</button>

      ES5 版本

      function checkText() {
        var str1 = document.getElementById("texty").innerHTML;
        var dexArray = [];
        str1.split("").forEach(function(x,i){
          x === " " && dexArray.push(i) 
        });
        console.log(dexArray);
      }
      <p id="texty">Mary had a little lamb</p>
      <button onclick="checkText()">Click</button>

      【讨论】:

        【解决方案4】:

        String.prototype.indexOf 返回给定子字符串的索引,您将它与空间' ' 进行比较。整个使用indexOf 毫无意义。如果您真的需要使用indexOf,那么您可能想查看此方法采用的参数,并注意到它可以将偏移量作为第二个参数,但我总是更喜欢更简单的解决方案,如果我有一个。

        你可以这样做:

        var str1 = 'whatever string you want to play with';
        var arraySpaces = [];
        var length = str1.length;
        var i = -1;
        
        while (++i < length) {
            if (str1[i] === ' ') {
                arraySpaces.push(i);
            }
        }
        
        console.log(arraySpaces);
        

        这样您就可以在数组中获得实际的空格索引。

        由于这是一个练习,您可能需要查看 Regexp.prototype.test 和 Regexp 的 lastIndex,如果您要查找更长的子字符串,则可以更方便地进行索引搜索。

        祝你好运。

        【讨论】:

          【解决方案5】:

          空出来的,可以用alert("1"+dexArray+"1")测试,因为str1.indexOf(str1[i])返回数字。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-02-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-05-06
            • 1970-01-01
            • 2015-03-03
            • 1970-01-01
            相关资源
            最近更新 更多