그것은 이러한 답변에 흥미있는 사람들이 모두 감동했다입니다 Object.keys()
및 for...of
하지만 그들을 결합하지 :
var map = {well:'hello', there:'!'};
for (let key of Object.keys(map))
console.log(key + ':' + map[key]);
당신은 단지 수 이 반복자 아니기 때문에, 그리고 나 오링은 추악한 / 비효율적이다.
나는 대부분의 사람들이 (확인 여부에 관계없이 ) 자제 하지 않기 때문에 기쁘다. 왜냐하면 위의 대답 외에는 대답하기 위해 여기에있다.for...of
Object
for...index
.forEach()
Object.keys()
for...in
.hasOwnProperty()
일반적인 객체 연결을 반복 할 수 있습니다! Map
for...of
Chrome 및 FF에서 작동 하는 멋진
DEMO 를 직접 사용하는 것처럼 작동합니다 (ES6 만 가정합니다)
var ordinaryObject = {well:'hello', there:'!'};
for (let pair of ordinaryObject)
//key:value
console.log(pair[0] + ':' + pair[1]);
//or
for (let [key, value] of ordinaryObject)
console.log(key + ':' + value);
아래에 심을 포함시키는 한 :
//makes all objects iterable just like Maps!!! YAY
//iterates over Object.keys() (which already ignores prototype chain for us)
Object.prototype[Symbol.iterator] = function() {
var keys = Object.keys(this)[Symbol.iterator]();
var obj = this;
var output;
return {next:function() {
if (!(output = keys.next()).done)
output.value = [output.value, obj[output.value]];
return output;
}};
};
좋은 구문 설탕이없는 실제 Map 객체를 만들 필요가 없습니다.
var trueMap = new Map([['well', 'hello'], ['there', '!']]);
for (let pair of trueMap)
console.log(pair[0] + ':' + pair[1]);
사실,이 심으로, 당신이 여전히 맵의 다른 기능을 활용하고 싶었지만 (모두 숨기지 않고) 여전히 깔끔한 객체 표기법을 사용하고 싶었다면, 객체는 이제 반복 가능하기 때문에 이제 맵을 만들 수 있습니다!
//shown in demo
var realMap = new Map({well:'hello', there:'!'});
shim을 좋아하지 않거나 prototype
일반적으로 혼란스러워하는 사람들은 창에서 대신 getObjIterator()
다음 과 같이 호출하여 기능을 자유롭게 만드십시오 .
//no prototype manipulation
function getObjIterator(obj) {
//create a dummy object instead of adding functionality to all objects
var iterator = new Object();
//give it what the shim does but as its own local property
iterator[Symbol.iterator] = function() {
var keys = Object.keys(obj)[Symbol.iterator]();
var output;
return {next:function() {
if (!(output = keys.next()).done)
output.value = [output.value, obj[output.value]];
return output;
}};
};
return iterator;
}
이제는 일반 함수로 호출 할 수 있습니다. 다른 영향은 없습니다.
var realMap = new Map(getObjIterator({well:'hello', there:'!'}))
또는
for (let pair of getObjIterator(ordinaryObject))
그것이 효과가없는 이유는 없습니다.
미래에 오신 것을 환영합니다.