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)
你可以使用reduce与concat上Object.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)
你也可以使用传播语法...使用concat上Object.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)