for循环只循环一次

时间:2016-07-11 02:39:13

标签: javascript loops

我的问题是for循环似乎只循环了一次,我不知道为什么。

我正在编写一个函数,将数组元素的最后一个字母与下一个数组元素的第一个字母进行比较。

我的测试输入是数组:[" Buddy Bear"," Romeo"," Olive"]。这些都符合标准(与下一个第一个字母匹配的最后一个字母),应该被推入一个数组。

我已经阅读了有关该主题的所有帖子,但无法找到一个似乎适合我的问题的帖子。我知道我错过了一些简单的东西,但却无法看到它。

小提琴:https://jsfiddle.net/qwL8hq3j/

function validName(array){
var lower = []
for(let i = 0; i < array.length; i++){
    lower.push(array[i].toLowerCase());
} 
var testA = []
var count = 0;

for(var i = 0; i < lower.length; i++) {
    var j = 1;
    if(lower[i].charAt(lower[i].length-1) === lower[j].charAt(0)){
        testA.push(lower[i]);
        j = j + 1;
        count = count + 1;
    } 
  } 
  return count;
}

我放了一个计数器,以确保代码循环并返回1,这让我得出结论,它只是循环一次。我也试过几次重新配置代码,但我不确定我哪里出错了。

5 个答案:

答案 0 :(得分:1)

var array = ["heehjko", "oient", "ana", "inm", "mii", "dgdgdfg", "Dove"]

var lower = []
for (let i = 0; i < array.length; i++) {
    lower.push(array[i].toLowerCase());
}
console.log(lower)
var testA = []
var count = 0;

for (var i = 0; i < lower.length; i++) {
    var j = 1;
    console.log(lower[i].charAt(lower[i].length - 1))
    console.log(lower[i + 1])
    if (lower[i + 1] != undefined) {
        if (lower[i].charAt(lower[i].length - 1) === lower[i + 1].charAt(0)) {

            testA.push(lower[i + 1]);
        }
    }

}
console.log(testA)

答案 1 :(得分:0)

根据其他对话,更新后的要求似乎是:

  

给出一系列名称,例如 [&#34; Bob&#34;,&#34; Jane&#34;,...] ,遍历数组,将元素 n 的最后一个字母与元素的第一个字母 n + 1 。如果它们匹配(不区分大小写),则应将两个元素添加到第二个&#34;结果数组&#34;。应该将两个元素(按索引)添加到结果数组中两次,但结果数组中可能存在重复值。

     

用例A:

     

鉴于: [&#34; Buddy Bear&#34;,&#34; Romeo&#34;,&#34; Olive&#34;]

     

期待: [&#34; Buddy Bear&#34;,&#34; Romeo&#34;,&#34; Olive&#34;]

     

用例B:

     

鉴于: [&#34; Jane&#34;,&#34; Bob&#34;,&#34; Bob&#34;,&#34; Bob&#34; ]

     

期待: [&#34; Bob&#34;,&#34; Bob&#34;,&#34; Bob&#34; ]

&#13;
&#13;
function validName(nameList){
  
  function _reducer(acc, item, index, arr){
    var nextIndex = index + 1;
    var nextItem = arr[nextIndex];
    if (!nextItem){ return acc; }

    var charA = item.charAt(item.length -1).toLowerCase();
    var charB = nextItem.charAt(0).toLowerCase();
    if (charA !== charB){ return acc; }

    // -------------------
    // Add "item" to the accumulator if it was not already
    // added in the previous itteration as "nextItem".
    // -------------------
    if (acc[acc.length -1] !== index){ acc.push(index); }
    // -------------------

    // -------------------
    // Add "nextItem" to the accumulator.
    // -------------------
    acc.push(nextIndex);
    // -------------------

    return acc;
  } 

  // -------------------
  // Convert the array of indices into an array of values
  // -------------------
  function _mapper(item){ return nameList[item]; }
  // -------------------
  
  var result = nameList.reduce(_reducer, []).map(_mapper);
  return result;
}

var nameList = ["Buddy Bear", "Romeo", "Olive"];
var result = validName(nameList);
console.log("CASE A: ");
console.log("Given: ");
console.log(nameList);
console.log("Result Count = " + result.length);
console.log(result);

console.log("");
console.log("");

nameList = ["Jane", "Bob", "Bob", "Bob"];
result = validName(nameList);
console.log("CASE B: ");
console.log("Given: ");
console.log(nameList);
console.log("Result Count = " + result.length);
console.log(result);
&#13;
&#13;
&#13;

答案 2 :(得分:0)

您的代码绝对正常

循环不循环1次。它循环为lower.length和lower.length为3。 你的条件

if(lower[i].charAt(lower[i].length-1) === lower[j].charAt(0))

一次成真。这样你的计数器值就会返回1.如果将计数器设置在if条件之外你会看到它

for(var i = 0; i < lower.length; i++) {
var j = 1;
if(lower[i].charAt(lower[i].length-1) === lower[j].charAt(0)){
    testA.push(lower[i]);
    j = j + 1;

} 
count = count + 1;
} 
return count;

答案 3 :(得分:0)

这段代码似乎对我很好:

function validName(array){
  var result=[],lower=[],count=0,len=0;
  for(i in array){
    lower.push(array[i].toLowerCase());
  }
  for(j in lower){
    i=j;i++;if(j==lower.length-1){break;}
    len=lower[j].length-1;
    var u=lower[j].charAt(len);
    var l=lower[i].charAt(0);
    if(u==l){
       result.push(lower[j]);
       count++;
    }
  }
  return result;
}
alert(validName(["Buddy Bear","Romeo", "Olive"]));

答案 4 :(得分:-1)

首先,添加&#34;;&#34;在命令的末尾

var lower = []

↓↓↓

var lower = [];

其次,将结果分配给数组,然后返回。

for(var i = 0; i < lower.length; i++) {
  ...
  arr_result.push(count);
}
return arr_result;

希望它有所帮助。