Unless you have a specific requirement I am missing, your use case is more 
elegantly resolved IMO using a custom generator that yields exactly the 
information you need per iteration.

A functional approach using a function that has the information you need is 
also another valid solution.

<div>-------- 元のメール --------</div><div>送信元: Tingan Ho <tinga...@gmail.com> 
</div><div>日時:2015/07/14  PM1:32  (GMT+09:00) </div><div>宛先: Edwin Reynoso 
<eor...@gmail.com> </div><div>Cc: es-discuss <es-discuss@mozilla.org> 
</div><div>件名: Re: for statement with index and value </div><div>
</div>Yes the proposed syntax is a special case for arrays. 

tis 14 juli 2015 kl 12:23 skrev Edwin Reynoso <eor...@gmail.com>:
Something wrong with server that doesn't let me edit.

But what I meant by the first code snippet was:

```JS
for(let a, b of new Set([1,2])) // what would `a` and `b` be here? How would it 
know what to extract??
```
Would `b` just be `undefined`, yet for an array it returns the `index` how does 
it determine that unless again this is special to Arrays?? because `b/index` 
could be anything else,  that's not obvious compare to destructuring.


On Tue, Jul 14, 2015 at 12:13 AM, Edwin Reynoso <eor...@gmail.com> wrote:
So I'm assuming this would be special to arrays??

because destructuring works fine for anything that's iterable:

meaning how would it know what to take out for Sets??

```JS
for(let value, index of [1,2]) {
 // do something
}
```

With destructuring we at least know what's being extracted (not sure if 
destructured would be the right word, clueless on that):

```JS
let it = [1,2].entries();
let [index, value] = it.next();
// same as:
let [index, value] = [0, 1];
// the matching is obvious
```

With your suggestion it's not obvious:

```JS
for(let value, index of [1,2]) // how does it know what value and index would 
be??
```

I don't think this would be done if it's only for Arrays.

On Tue, Jul 14, 2015 at 12:04 AM, Tingan Ho <tinga...@gmail.com> wrote:
>Unfortunately we can't have both...
```
for (let [index, value] of values){
```

I was suggesting the syntax:
```
for (let value, index of values){
```
`value` comes first and no `[ ... ]`.



On Tue, Jul 14, 2015 at 11:52 AM, Logan Smyth <loganfsm...@gmail.com> wrote:
Unfortunately we can't have both

```
for (let value of values){
```

and

```
for (let [index, value] of values){
```

Over all, the first one is the more likely one on a day-to-day basis.

The `[]` are needed because the `for...of` follows the standard rules for 
assignment, so it uses standard destructuring, and JS array destructuring 
requires `[]`.

```
for (let [index, value] of values.entries()){
```

is essentially is the same as

```
for (let pair of values.entries()){
    let [index, value] = pair;
```

As for your last question, `.entries` returns an iterator, so it will not 
create a copy of the array.

On Mon, Jul 13, 2015 at 7:43 PM, Tingan Ho <tinga...@gmail.com> wrote:
>for (let [index, value] of [1, 2, 3].entries()) 
        console.log(index + ": " + value)

I still think most people will write:

```
for (let value of values) { ... }
```
and then rewrite the whole expression inside the `for-loop` when they find out 
that they need the index too:
```
for (let [index, value] of [1, 2, 3].entries()) 
        console.log(index + ": " + value)
```
`for (let value, index of values) { ... }` is still much easier to type than 
`for (let [index, value] of [1, 2, 3].entries())` and also more readable.


Also, doesn't that makes a copy of the `[1, 2, 3]`?

-- 
Sincerely,

Tingan Ho
@tingan87

_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss





-- 
Sincerely,

Tingan Ho
@tingan87

_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss



_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to