2016-03-08 104 views
1

我使用ES6node项目,并用巴贝尔CLI编译到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]undefined

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一个迭代类型(如Map

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

使用for ... in循环:

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

我真的错过了'set'和'map'。非常感谢 – Awakening