2016-08-05 63 views
3

在我的TypeScript项目中,我想将Array中的值与下一个值进行比较。如果我在JavaScript这样做,我会做这样的事情:识别循环迭代当前的下一个条目Typescript

//JS 
for (var i = 0; i < codeBlocks.length; i++) { 
    var j = i + 1; 
    if (codeBlocks[i] > codeBlocks[j]) {return true;} 
    return false; 
} 

不过,我真的很喜欢这个打字稿语法,因为它是更具可读性。

//TS 
for (let codeBlock of codeBlocks) { 
    //logic 
} 

有没有一种方法来描述typecript中的“next iteration”值for循环?

+0

为什么不试试if(codeBlocks [i]> codeBlocks [i + 1])if(codeBlocks [i]> codeBlocks [j]) –

+0

@BunkerBoy我只是试图在TypeScript中实现,这个例子只是为了帮助解释这个问题。 –

回答

0

您可以在TypeScript中使用相同的语法for (var i = 0; i < codeBlocks.length; i++)。但是你的周期只会运行一次。

+0

“你的周期只能运行一次”是什么意思? – 2016-08-06 09:51:15

+0

@torazaburo在循环的第一次运行中总是从函数返回。这意味着它在第一次运行时就打破了周期 – Maxx

0

不,这不是 ..的目的。你可以阅读更多关于它on MDN

您必须使用for (var i = 0; i < codeBlocks.length; i++)语法。

+0

这是[typescript](http://www.typescriptlang.org/docs/handbook/iterators-and-generators.html),这就是它的用途。 –

+1

@GeorgeEdwards for..of不是打字稿特定的语法。它是ES6标准的一部分。这并不意味着给你索引访问数组。你有正规的或forEach(如JBaby张贴)。 – toskv

+0

是的,但我的目标是针对es5和TypeScript编译...以了解您发布的内容,所以说“这不是目的”并没有什么意义 –

3

您可以使用entries()

for (var [index, codeBlock] of codeBlocks.entries()) 
{ 
    // your code you can use index 
} 

DEMO

例片段:

var test = ['a','b','c'] 
for (var [index, cur] of test.entries()) 
{ 
    var j = index + 1; 
    console.log("Current value: "+cur+" Next value: "+test[j]) 
} 
+0

他如何获取循环体中的下一个值? – Maxx

+0

@Maxx请检查更新的答案。 – Manwal

+0

我明白了。那么,我认为这是一个litle – Maxx

1

如果你想要一个元素的索引,使用的foreach功能:

codeBlocks.forEach((item, index) => { 
    console.log(item); // item in the array 
    console.log(index); // item index in the array 
}); 
+1

恩,他已经在他发布的for循环中有索引。 – 2016-08-06 09:49:20

+0

是的,但他的问题是这样的“ 有没有一种方法可以描述”typecript“中的”next iteration“值... for循环?” – JBaby

0

这里是产生元素对发电机:

function *pairs(array) { 
 
    let prev = array.shift(); 
 

 
    for (v of array) { 
 
    yield [prev, v]; 
 
    prev = v; 
 
    } 
 
} 
 

 
for (let pair of pairs([1,2,3])) { console.log(pair); }

如果你想也产生最后对与最后的值和未定义,那么只需在该函数的末尾添加一个yield [prev, undefined];即可。 (codeBlocks [i]> codeBlocks [j])