Javascript 为什么函数体中的for-of循环没有像传统的for循环那样提供预期的输出?

Javascript 为什么函数体中的for-of循环没有像传统的for循环那样提供预期的输出?,javascript,for-loop,for-of-loop,Javascript,For Loop,For Of Loop,为什么函数体中的for-of循环没有像传统的for循环那样提供预期的输出?似乎for-of循环中的el与for循环中的iterable[i]不一样 var uniqueInOrder = function(iterable){ let unique = []; for(let el of iterable){ let cur = el; let next = el + 1; if(cur !== next){

为什么函数体中的for-of循环没有像传统的for循环那样提供预期的输出?似乎for-of循环中的el与for循环中的iterable[i]不一样

var uniqueInOrder = function(iterable){
     let unique = [];
     for(let el of iterable){
         let cur = el;
         let next = el + 1;
         if(cur !== next){
             unique.push(cur)
         }
     }
     return unique;
}
uniqueInOrder('AAAABBBCCDAABBB')  // unexpected output

// Returns expected output
var uniqueInOrder = function(iterable){
     let unique = [];
     for(var i = 0; i < iterable.length; i++){
         let cur = iterable[i];
         let next = iterable[i + 1];
         if(cur !== next){
             unique.push(cur)
         }
     }
     return unique;
}
uniqueInOrder('AAAABBBCCDAABBB') // ----> ["A", "B", "C", "D", "A", "B"]

你的问题是在你的第一个功能

在JavaScript中,惰性{}的for let元素中的元素与传统for循环中的i不同。当你写let next=el+时,你是在给一个元素加1,而不是一个数字,所以在这个例子中,你是在做“a”+1,就像@Seblor说的那样


tl;el博士与我不同,你的问题在于你的第一个职能

在JavaScript中,惰性{}的for let元素中的元素与传统for循环中的i不同。当你写let next=el+时,你是在给一个元素加1,而不是一个数字,所以在这个例子中,你是在做“a”+1,就像@Seblor说的那样


tl;dr el与i

不同,比如@Sxribe descripe,for/of循环根本不同,您不能使用el+1来获取下一个值

使用两个循环获得相同结果的函数方法是:

var uniqueInOrder = function(iterable){
     let unique = [];
     let prev = ''
     for(let el of iterable){
         let cur = el;
         if(cur !== prev){
            prev = el
             unique.push(prev)
         }
     }
     return unique;
}
console.log(uniqueInOrder('AAAABBBCCDAABBB'))

// Returns expected output
var uniqueInOrder = function(iterable){
     let unique = [];
     for(var i = 0; i < iterable.length; i++){
         let cur = iterable[i];
         let next = iterable[i + 1];
         if(cur !== next){
             unique.push(cur)
         }
     }
     return unique;
}
console.log(uniqueInOrder('AAAABBBCCDAABBB'))

在本例中,我们没有对照下一个值检查当前值,而是对照上一个值检查当前值。

与@Sxribe descripe一样,for/of循环根本不同,您不能使用el+1来获取下一个值

使用两个循环获得相同结果的函数方法是:

var uniqueInOrder = function(iterable){
     let unique = [];
     let prev = ''
     for(let el of iterable){
         let cur = el;
         if(cur !== prev){
            prev = el
             unique.push(prev)
         }
     }
     return unique;
}
console.log(uniqueInOrder('AAAABBBCCDAABBB'))

// Returns expected output
var uniqueInOrder = function(iterable){
     let unique = [];
     for(var i = 0; i < iterable.length; i++){
         let cur = iterable[i];
         let next = iterable[i + 1];
         if(cur !== next){
             unique.push(cur)
         }
     }
     return unique;
}
console.log(uniqueInOrder('AAAABBBCCDAABBB'))

在本例中,我们不是对照下一个值检查当前值,而是对照上一个值检查当前值。

正如@Sxribe所说,您得到的是元素而不是i计数

因此,您需要检查el是否存在于阵列中,如果不存在,则将其推送到阵列中。 所以像这样的东西就可以了

函数唯一序可数{ let unique=[]; 伊特拉布的弗雷特·艾尔{ 设cur=el; ifunique.indexOfel==-1{ 独特的pushcur } } 返回唯一值; }
console.loguniqueInOrder'AAAABBBCCDAABBB' 正如@Sxribe所说,您得到的是元素而不是i计数

因此,您需要检查el是否存在于阵列中,如果不存在,则将其推送到阵列中。 所以像这样的东西就可以了

函数唯一序可数{ let unique=[]; 伊特拉布的弗雷特·艾尔{ let=电流; ifunique.indexOfel==-1{ 独特的pushcur } } 返回唯一值; }
console.loguniqueInOrder'AAAABBBCCDAABBB';el+1应该是什么?el不是指针。将“A”与“A”+1进行比较是一个旁注,第二个循环应该只迭代到iterable.length-1。您不能使用for…of循环复制第二个函数,因为您需要索引,而for…of不提供任何索引。el+1应该是什么?el不是指针。将“A”与“A”+1进行比较是一个旁注,第二个循环应该只迭代iterable.length-1。不能使用for…of循环复制第二个函数,因为需要索引,而for…of不提供任何索引。