1

为什么函数体内的 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"]
4

3 回答 3

3

您的问题在于您的第一个功能。

在 JavaScript 中,elementinfor (let element of inerable) {}i传统for循环中的不同。当你写的时候let next = el +,你是在添加1一个元素,而不是一个数字(所以,在这种情况下,你正在做'A' + 1,就像@Seblor 说的那样)。

tl;博士el不一样i

于 2019-11-13T15:24:09.120 回答
0

就像@Sxribe 描述的那样,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'))

在此示例中,我们不是根据下一个值检查当前值,而是根据前一个值检查当前值。

于 2019-11-13T15:33:23.967 回答
0

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

因此,您需要检查数组中是否el存在退出,如果没有,则将其推送到数组中。所以像这样的事情会做到这一点。

function uniqueInOrder (iterable){
   let unique = [];
   for(let el of iterable){
      let cur = el;
      if(unique.indexOf(el) === -1){
         unique.push(cur)
      }
   }
   return unique;
}

console.log(uniqueInOrder('AAAABBBCCDAABBB'));

于 2019-11-13T15:34:18.450 回答