调用[Symbol.iterator]()时不生成对象

时间:2017-12-09 05:15:48

标签: javascript ecmascript-6 iterator iterable

这是源代码:

filenames = (f.name for f in os.scandir() if not f.name.startswith('.'))

第一次调用const james = { name: 'James', height: `5'10"`, weight: 185, [Symbol.iterator]:function*(){ yield Object.keys(this) ; } }; const iterator = james[Symbol.iterator](); // console.log(iterator.next().value); // 'James' console.log(iterator.next().value); // `5'10` console.log(iterator.next().value); // 185 应该打印

iterator.next().value

但正在打印{"value":"James","key":"name","done":false} 。怎么解决这个?

2 个答案:

答案 0 :(得分:4)

[code] $dataset = new SimpleXMLElement($html); foreach($dataset->item as $list) { $wpdb->query($wpdb->prepare("INSERT INTO table (`id`,`number`,`string`) VALUES (%d,%d,%s) ", $list->id, $list->number, $list->string ) ) ; } } [/code] 同时拥有所有密钥。意味着您的第一个yield完成所有工作。您所需要的只是按顺序迭代键和next

yield

答案 1 :(得分:0)

实际上,这将是您正在寻找的解决方案,它会输出您需要输出的内容。

const james = {
  name: 'James',
  height: `5'10"`,
  weight: 185,
  [Symbol.iterator]: function() {
    let keys = Object.keys(this), index = 0;
    return {
      next: () => { 
        return {
          key: keys[index], value: this[keys[index]], done: ++index >= keys.length 
        };  
      }
    }
  }
}

const iterator = james[Symbol.iterator]();

console.log(iterator.next().value);
console.log(iterator.next().value);
console.log(iterator.next().value);