[英]Loop over object es6
我有一个看起来像这样的对象:
const object = {
head: 1,
eyes: 2,
arms: 2,
legs: 3
}
我想循环遍历这个对象,然后注销每个键名,例如eyes
的值。
这将导致:
head
eyes
eyes
arms
arms
legs
legs
legs
目前我有这个解决方案,但感觉它可以做得更整齐和可读。
Object.keys(object)
.map(key => {
return [...Array(object[key])].map( (_, i) => {
return console.log(key)
})
有什么建议么?
您可以使用Object.entries()
和map()
方法并返回新数组。
const object = {head: 1,eyes: 2,arms: 2,legs: 3} const res = [].concat(...Object.entries(object).map(([k, v]) => Array(v).fill(k))) console.log(res)
或者你可以在数组中使用带有扩展语法的reduce()
。
const object = {head: 1,eyes: 2,arms: 2,legs: 3} const res = Object .entries(object) .reduce((r, [k, v]) => [...r, ...Array(v).fill(k)], []) // Or you can use push instead // .reduce((r, [k, v]) => (r.push(...Array(v).fill(k)), r), []) console.log(res)
Object.entries(object)
.forEach(([key, times]) => console.log((key + "\n").repeat(times)));
可以使用String.prototype.repeat
...
“......感觉它可以做得更整齐,更容易阅读。”
递归使它非常干净和易懂。
const object = { head: 1, eyes: 2, arms: 2, legs: 3 }; Object.entries(object).forEach(function f([k,v]) { if (v) { console.log(k); f([k, --v]); } })
如果您知道值始终大于0
则可以重新排列一些内容。
const object = { head: 1, eyes: 2, arms: 2, legs: 3 }; Object.entries(object).forEach(function f([k,v]) { console.log(k); if (--v) f([k, v]); })
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.