2016-03-08 11 views
1

Я пишу node проект с использованием ES6, и с помощью Babel командной строки для компиляции в ES5, но получил ошибку на ES6 for ofстолпотворения OBJ symbol.iterator неопределенные

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

скомпилированных 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; 
    } 

И params[Symbol.iterator] является неопределенными

let params = { 
    key: 'value' 
} 


babel server.babel.js -o server.js 

Как это исправить, спасибо.

ответ

1

Цитирование Difference between for...of and for...in

для ... из синтаксиса является специфичным для коллекций, а не все объекты. Он будет проходить таким образом по любым элементам любой коллекции, которая имеет свойство [Symbol.iterator].

params не имеет [Symbol.iterator] свойство, поэтому вы не можете использовать цикл for ... of здесь.

Преобразовать obj к Iterable типа (например, Map)

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

или использовать for ... in цикл:

for (let prop in obj) { 
    string += `/${prop}/${obj[prop]}` 
} 
+0

Я действительно не хватает 'set' и' map'. Огромное спасибо – Awakening

Смежные вопросы