推送Array中的字符索引

时间:2016-10-12 10:23:59

标签: javascript for-loop indexof

我只是在玩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>

5 个答案:

答案 0 :(得分:1)

您只需要检查位置i处的字符,然后将其推送到结果中。

&#13;
&#13;
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);
}
&#13;
<p id="texty">Mary had a little lamb</p>
<button onclick="checkText()">Click</button>
&#13;
&#13;
&#13;

indexOf的版本。

&#13;
&#13;
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);
}
&#13;
<p id="texty">Mary had a little lamb</p>
<button onclick="checkText()">Click</button>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

由于您的if-conditionindexOf返回number而不是string,更不用说空格字符' '了。

&#13;
&#13;
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);
}
&#13;
<p id="texty">Mary had a little lamb</p>
<button onclick="checkText()">Click</button>
&#13;
&#13;
&#13;

答案 2 :(得分:1)

您应该使用比较运算符=====代替indexOf

ES6版本

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

ES5版本

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

答案 3 :(得分:1)

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,如果您要查找更长的子字符串,它可以进行更方便的索引搜索。

祝你好运。

答案 4 :(得分:0)

是空的,你可以使用alert(&#34; 1&#34; + dexArray +&#34; 1&#34;)测试,因为str1.indexOf(str1 [i])返回数字。