Javascript 为什么函数体中的for-of循环没有像传统的for循环那样提供预期的输出?
为什么函数体中的for-of循环没有像传统的for循环那样提供预期的输出?似乎for-of循环中的el与for循环中的iterable[i]不一样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){
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不提供任何索引。