Это невозможно сделать в node.js, потому что текущая версия v8 не реализовала итерацию, как указано в этом bug report.
Мы можем подтвердить, что, посмотрев на исходный код v8-х collection.js:
InstallFunctions($Map.prototype, DONT_ENUM, $Array(
"get", MapGet,
"set", MapSet,
"has", MapHas,
"delete", MapDelete,
"clear", MapClear
));
Но, как можно видеть в ECMAScript 6 wiki, также должны быть items()
, keys()
и values()
. v8, вероятно, раньше не применял эти методы, поскольку он не поддерживал генераторы. Но теперь it does с мая этого года. Это должно быть просто вопросом времени, пока это не будет реализовано.
Если у вас должна быть эта функция сейчас, вы можете использовать map-set-for-each, который заполняет forEach
. Вам необходимо будет изменить его, чтобы добавить case 'symbol':
после case 'object':
.
a.forEach(function(value, key) {
if (value === 'Noise') {
console.log('Give mak the bounty');
}
});
Когда v8 реализует итерацию Map
вы сможете найти Noise
так:
for (let [key, value] of a) {
if (value === 'Noise') {
console.log('Upvotes for future');
}
}
я не знаю об утечке, но вы не можете вернуться к значению без ref to the Symbol() return ... – dandavis
Я понятия не имею, как работают символы ES 6, но не можете ли вы перечислить объект? 'для (var key in a) alert (a [ключ]);' – jods