推送数组中字符的索引

Push index of characters in Array

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

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>

您只需要检查 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>

这是因为你的 if-condition, indexOf returns 一个 number 而不是 string 更不用说一个空的 space 字符' '.

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>

您应该使用比较运算符 ===== 而不是 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>

String.prototype.indexOf returns 给定子字符串的索引,您正在将其与 space ' ' 进行比较。 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);

这样你的数组中就有 spaces 的实际索引。

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

祝你好运。

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