jsオブジェクトobj is not iterable問題は、拡張演算子を使用してオブジェクト解決方法を展開できず、オブジェクトの反復器(面接問題)を定義します.
1203 ワード
に質問
オブジェクトに拡張演算子を使用すると、TypeError:obj is not iterableという異常が投げ出されることに気づきました.これも面接問題です.問題は次のとおりです.
タイプエラーを起こさずに、次の文の展開演算を何らかの方法で使用できますか?
エラー・コードの例です.
問題を解く知識点
Symbol.iteratorは、各オブジェクトのデフォルトの反復器を定義します.この反復器はfor...ofでリサイクルすることができる.
Reflect.ownKeysスタティックメソッドReflect.ownKeys()は、ターゲットオブジェクト自体のプロパティキーからなる配列を返します.
解答を解く next法は反復器iteratorの1つの方法 である.は、少なくとも1つのオブジェクトを返し、オブジェクトにはvalue&done の2つのプロパティがあります. value反復値 を定義するために使用される doneブールタイプ:trueを設定すると、直接戻ります.falseを設定または設定しないで、forループのような歩き方を続けます.
答えは次のとおりです.
参照先:
1.8の経典JavaScript面接問題の解析、あなたは本当にJavaScriptを掌握しましたか?2.MDN-Reflect.ownKeys()3.MDN-Symbol.iterator 4.ES 6学習-新しい構文:Symbols-Symbol.iterator
オブジェクトに拡張演算子を使用すると、TypeError:obj is not iterableという異常が投げ出されることに気づきました.これも面接問題です.問題は次のとおりです.
タイプエラーを起こさずに、次の文の展開演算を何らかの方法で使用できますか?
エラー・コードの例です.
let obj = { x: 1, y: 2, z: 3 }
console.log([...obj]) // TypeError
問題を解く知識点
Symbol.iteratorは、各オブジェクトのデフォルトの反復器を定義します.この反復器はfor...ofでリサイクルすることができる.
Reflect.ownKeysスタティックメソッドReflect.ownKeys()は、ターゲットオブジェクト自体のプロパティキーからなる配列を返します.
解答を解く
答えは次のとおりです.
var obj = { x: 1, y: 2, z: 3 }
obj[Symbol.iterator] = function() {
return {
next:function(){
let objArr = Reflect.ownKeys(obj)
if (this.index < objArr.length-1) {
let key = objArr[this.index];
this.index++;
return { value: obj[key] };
} else {
return { done: true };
}
},
index:0
}
}
console.log([...obj]) // [1, 2, 3]
参照先:
1.8の経典JavaScript面接問題の解析、あなたは本当にJavaScriptを掌握しましたか?2.MDN-Reflect.ownKeys()3.MDN-Symbol.iterator 4.ES 6学習-新しい構文:Symbols-Symbol.iterator