对象到数组的转换

Mic*_*ael 2 javascript arrays object ecmascript-6 reactjs

我在一个类中有这个状态对象:

state = {
    ingredients: {
        salad: 1,
        bacon: 5, 
        cheese: 2, 
        meat: 2
    }
}
Run Code Online (Sandbox Code Playgroud)

并希望将其转换为一个数组,该数组也获取值编号,如下所示:

const burger = (props) => {
const transformedIngredients = Object.keys(props.ingredients)
    .map(igKey => {
        return [...Array(props.ingredients[igKey])].map((_,i)=>{
           return <BurgerIngredient key={igKey + i} type={igKey}/>
        });
    });

    console.log(transformedIngredients)
    return(
        <div className={classes.Burger}> 
        <BurgerIngredient type="bread-top" />
        <BurgerIngredient type="cheese" />
        <BurgerIngredient type="meat" />
        <BurgerIngredient type="bread-bottom" />
    </div>
  );
};
export default burger;
Run Code Online (Sandbox Code Playgroud)

我按照教程成功地做到了,老实说我不完全理解这里发生了什么。特别是这部分:

return [...Array(props.ingredients[igKey])].map((_,i)=>{
       return <BurgerIngredient key={igKey + i} type={igKey}/>
    });
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!谢谢!

Jon*_*lms 6

igKeybacon例如,是成分的关键之一。现在在成分中查找

 props.ingredients[igKey]
Run Code Online (Sandbox Code Playgroud)

5在这种情况下,这将导致金额。现在用于构建具有该长度的数组:

 Array(5) // { length: 5 }
Run Code Online (Sandbox Code Playgroud)

现在该数组是一个稀疏数组,其中没有任何内容。为了能够用 迭代它map,它必须用未定义的值填充,因此稀疏数组被扩展到一个新数组中,这将它变成一个填充数组:

 [...Array(5)] // { length: 5, 0: undefined, 1: undefined, 2: ... }
Run Code Online (Sandbox Code Playgroud)

现在,具有 5 个条目的空数组将映射到具有 5 个 Burger 成分的数组。


顺便说一句,更优雅的 IMO:

 Array.from(
   { length: props.infredients[igKey] },
   (_, i) => <BurgerIngredient key={igKey + i} type={igKey}/>
 )
Run Code Online (Sandbox Code Playgroud)