在展平包含的对象数组的同时将对象条目转换为数组的更短方法?(改进我的解决方案)

Sum*_*omo 1 javascript ecmascript-6

我有一个像这样的对象:

export default {
  characters: {
    hero: { h: 1 },

    boundaries: { b: 1 },

    zombies: [{ z: 1 }, { z: 2 }, { z: 3 }],
    bullets: [{ b: 1 }, { b: 2 }, { b: 3 }],
  },
};
Run Code Online (Sandbox Code Playgroud)

我需要从它创建一个看起来像这样的数组,但顺序并不重要:

[ { h: 1 }, { b: 1 }, { z: 1 }, { z: 2 }, { z: 3 }, { b: 1 }, { b: 2 }, { b: 3 } ]
Run Code Online (Sandbox Code Playgroud)

我目前的解决方案是有效的,但似乎可以改进,以更加雄辩,并使用更少的代码行.

import gameState from './modules/gameState.js';
let toRender = [];

Object.keys(gameState.characters).forEach(e => {
  if (Array.isArray(gameState.characters[e])) {
    toRender.push(...gameState.characters[e]);
  } else {
    toRender.push(gameState.characters[e]);
  }
});

renderScreen(toRender);

function renderScreen(theArgs) {
  theArgs.forEach(character => {
    character.draw();
  });
}
Run Code Online (Sandbox Code Playgroud)

Nen*_*car 6

你可以使用reduceconcatObject.values.

const data = {characters: {hero: { h: 1 },boundaries: { b: 1 },zombies: [{ z: 1 }, { z: 2 }, { z: 3 }],bullets: [{ b: 1 }, { b: 2 }, { b: 3 }],},};
const result = Object.values(data.characters).reduce((r, e) => r.concat(e), []);
console.log(result)
Run Code Online (Sandbox Code Playgroud)

你也可以使用传播语法...使用concatObject.values.

const data = {characters: {hero: { h: 1 },boundaries: { b: 1 },zombies: [{ z: 1 }, { z: 2 }, { z: 3 }],bullets: [{ b: 1 }, { b: 2 }, { b: 3 }],},};
const result = [].concat(...Object.values(data.characters))
console.log(result)
Run Code Online (Sandbox Code Playgroud)