我正在尝试找出如何迭代一个使用Symbol名称唯一标识属性的对象。例如,如果我有这个对象:
const bowl1 = {
'apple': { color: 'red', weight: 136.078 },
'banana': { color: 'yellow', weight: 183.151 },
'orange': { color: 'orange', weight: 170.097 },
'peach': { color: 'yellow', weight: 176.845 }
};
for (var fruit in bowl1) {
var item = bowl1[fruit];
console.log(`${fruit}: `, item);
}
OUTPUT:
apple: { color: 'red', weight: 136.078 }
banana: { color: 'yellow', weight: 183.151 }
orange: { color: 'orange', weight: 170.097 }
peach: { color: 'yellow', weight: 176.845 }
// can even write your own iterator to get the same results
function* iterate_object(o) {
var keys = Object.keys(o);
for (var i = 0; i < keys.length; i++) {
yield [keys[i], o[keys[i]]];
}
}
// output is the same as above
for (var [key, val] of iterate_object(bowl1)) {
console.log(key, val);
}
然而,如果我将此对象更改为使用符号作为以下方式:
const bowl = {
[Symbol('apple')]: { color: 'red', weight: 136.078 },
[Symbol('banana')]: { color: 'yellow', weight: 183.15 },
[Symbol('orange')]: { color: 'orange', weight: 170.097 },
[Symbol('banana')]: { color: 'yellow', weight: 176.845 }
};
请注意,符号被用于防止第二个香蕉覆盖第一个。
无论如何,以上使用的方法都不能正确迭代此对象。
是否有一种使用符号名称迭代对象的方法? 它需要被创建为一个类并具有一个迭代器方法吗?
提前感谢您的帮助。
getOwnPropertySymbols
的情况,即Object.getOwnPropertyNames()
不会返回符号对象属性,但是您可以使用Object.getOwnPropertySymbols()
来获取这些属性。 - Nope