1

I'm writing a node project using ES6, and using babel cli to compile to ES5, but got error on ES6 for of

let parseParams = (obj)=> {
  let string = ''
  for (var [key,value] of obj) {
    string += `/${key}/${value}`
  }
  console.log(`obj: ${string}`)
  return string;
}  

compiled js =>

for (var _iterator = params[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
        var _step$value = _slicedToArray(_step.value, 2);

        var key = _step$value[0];
        var value = _step$value[1];

        string += '/' + key + '/' + value;
    }  

And params[Symbol.iterator] is undefined

let params = {
    key: 'value'
}


babel server.babel.js -o server.js  

How can I fix this, thanks.

Felix Kling
  • 795,719
  • 175
  • 1,089
  • 1,143
Awakening
  • 3,615
  • 8
  • 35
  • 51

1 Answers1

1

Quoting Difference between for...of and for...in

The for...of syntax is specific to collections, rather than all objects. It will iterate in this manner over any the elements of any collection that has a [Symbol.iterator] property.

params doesn't have a [Symbol.iterator] property, therefore you can't use the for ... of loop here.

Convert obj to an iterable type (such as Map)

let params = new Map([['key', 'value']]);

or use the for ... in loop:

for (let prop in obj) {
   string += `/${prop}/${obj[prop]}`
}
vaultah
  • 44,105
  • 12
  • 114
  • 143