JavaScript中的.push不会将数据推送回数组,为什么?

时间:2014-02-25 20:25:55

标签: javascript arrays

var text = "blah blah Josh bbla Josh Josh";

var myName = "Josh";
var hits = [];

for (var i = 0; i < text.length; i++);{
    if (text[i] === myName[0]) {
        for (var j = i; j < (myName.length + i); j++) {
            hits.push(text[j]);    
        }
    }
}

if (hits.length === 0) {
    console.log("Your name wasn't found!");}
else {
    console.log(hits);
} 

为什么这段代码不会将数据发送到数组中?感觉就像我尝试了一切,根据在线论坛,这是正确的synthax。任何帮助都会得到满足。

5 个答案:

答案 0 :(得分:5)

在开始花括号前删除分号。那个分号现在形成了for循环的主体,结果没有任何结果。

for(var i = 0; i < text.length; i++);{

答案 1 :(得分:0)

如果您正在关注“推送数据”,则只需在第6行末尾的大括号前删除分号,该分号为:

for (var i = 0; i < text.length; i++);{

这应该使for循环的块执行得恰到好处。看起来应该是这样的:

for (var i = 0; i < text.length; i++) {
    if (text[i] === myName[0]) {
        for (var j = i; j < (myName.length + i); j++) {
            hits.push(text[j]);    
        }
    }
}

答案 2 :(得分:-1)

你不需要循环两次; 只需将字符串和循环分开一次,如下所示:

var text = "blah blah Josh bbla Josh Josh";
var myName = "Josh";
var hits = [];

text = text.split(" ")
for(var i = 0; i < text.length; i++){
    if (text[i] === myName){
    hits.push(text[i]);    
}
}
if(hits.length === 0) {
  console.log("Your name wasn't found!");
}
else{
  console.log(hits);
} 

答案 3 :(得分:-1)

我认为这是XY problem的一个案例。

如果您想知道字符串是否包含其他子字符串,请更好地使用

if("blah blah Josh bbla Josh Josh".indexOf("Josh") < 0) {
    console.log("Your name wasn't found!");}
else {
    // Whatever
} 

或者,如果你真的想获得['J','o','s','h','J','o',...],你可以使用

"blah blah Josh bbla Josh Josh".match(/Josh/g).join('').split('')

答案 4 :(得分:-2)

你恰好为string.length获取一个值,告诉你有多少个字符。您可能实际上并没有尝试遍历字符串。相反,似乎你想要将字符串拆分成一个名字数组 - 在空格处分解:

var names = text.split(' ');
for(var i = 0; i < names.length; i++);{