2017-12-10 2 views
0

.next()メソッドはvalueとdoneという2つのプロパティを持つオブジェクトを返します。値と共にキーを返して終了するメソッドはありますか?ここでは、コードがあります:key、valueを生成するメソッドで、{value:..、key:..、done:..}の形式で行われます。

const james = { 
    name: 'James', 
    height: `5'10"`, 
    weight: 185, 
    [Symbol.iterator]:function*(){ 
     for(let key of Object.keys(this)) { 
      yield this[key]; 
     } 
    } 
}; 

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

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

このコードの出力は次のようになります。

{ value: 'James', done: false } 
{ value: '5\'10"', done: false } 
{ value: 185, done: false } 

予想される出力:

{ value: 'James', key: 'name', done: false } 
{ value: '5\'10"', key: 'height', done: false } 
{ value: 185, key: 'weight', done: false } 
+0

?いいえ、彼らはただ価値を出してしまいました。あなたは何の鍵を返そうとしていますか?単一のオブジェクトとして必要なすべてのデータを「収穫」することはできませんか? –

+0

キーのキー:オブジェクトプロパティの値のペア – Karthik

+0

どのオブジェクトですか?ユースケース全体を表示してください。あなたは私が推測したような発電機を使用していますか? –

答えて

1

あなたが発電機になります最も近いオブジェクトを自分で得るためになります

yield {key: key, value: this[key]}; 

const james = { 
 
    name: 'James', 
 
    height: `5'10"`, 
 
    weight: 185, 
 
    [Symbol.iterator]: function*() { 
 
    for (let key of Object.keys(this)) { 
 
     yield { 
 
     key: key, 
 
     value: this[key] 
 
     }; 
 
    } 
 
    } 
 
}; 
 

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

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

0

あなたはこのように、あなた自身の反復ラッパー関数を作成することができます。ジェネレータ関数の場合

const james = { 
 
    name: 'James', 
 
    height: `5'10"`, 
 
    weight: 185, 
 
}; 
 

 
// Custom iterator wrapper 
 
const iterate = (obj) => { 
 
    function* iter(){ 
 
     for(let key of Object.keys(obj)) { 
 
      yield {key: key, value: obj[key]}; 
 
     } 
 
    } 
 
    return() => { 
 
    const r = iter().next(); 
 
    return {key: r.value.key, value: r.value.value, done: r.done}; 
 
    } 
 
} 
 

 

 
const next = iterate(james); 
 

 
console.log(next()); 
 
console.log(next()); 
 
console.log(next());

関連する問題