繁体   English   中英

循环对象es6

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM