javascript - 对象到数组的转换

标签 javascript arrays reactjs object ecmascript-6

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

state = {
    ingredients: {
        salad: 1,
        bacon: 5, 
        cheese: 2, 
        meat: 2
    }
}

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

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;

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

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

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

最佳答案

igKey 是配料的关键之一,例如 bacon。现在在配料中查找了

 props.ingredients[igKey]

然后得出金额,在本例中为 5。现在用于构建具有该长度的数组:

 Array(5) // { length: 5 }

现在这个数组是一个稀疏数组,里面什么都没有。为了能够使用 map 对其进行迭代,它必须用未定义的值填充,因此该稀疏数组被扩展到一个新数组中,从而将其变成一个填充数组:

 [...Array(5)] // { length: 5, 0: undefined, 1: undefined, 2: ... }

现在,包含 5 个条目的空数组将映射到包含 5 种汉堡配料的数组。


顺便说一句,IMO 更优雅:

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

关于javascript - 对象到数组的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51190966/

相关文章:

javascript - 如何计算 JavaScript 数组中的字符数?

c - 修复 C 代码和参数修复编译错误

python - 将天文表中的行转换为 numpy 数组

javascript - 将元素从一个对象添加/合并到数组内的另一个对象

javascript - 如何解决功能组件上的 jsx-no-bind 错误?

javascript - 如何在 RxJS 中使用 take() 而不取消订阅 observable

javascript - 文本未出现在 SVG 上

javascript - 将数组转换为具有预定义键的映射

reactjs - React Router嵌套路由在父路由内部渲染,如何单独渲染?

javascript - React useEffect Hook 中对象和数组依赖项的 ESLint 规则