javascript - 范围错误 : invalid array length

标签 javascript arrays reactjs

我想从对象的键中获取一个数组,但是当对象为空时长度应该为 0。当我尝试对数组使用 console.log() 时,数组的长度是正确的,但我的代码卡住了,在我的浏览器上抛出以下错误并停止执行:

RangeError: invalid array length
burger/transformedIngredients<
src/components/Burger/Burger.js:8

   5 | const burger = (props) => {
   6 |   let transformedIngredients = Object.keys(props.ingredients).map(igKey => (
   7 |     // eslint-disable-next-line max-len,react/no-array-index-key
>  8 |     [...Array(props.ingredients[igKey])].map((_, i) => <BurgerIngredient key={igKey + i} type={igKey} />)
   9 |   )).reduce((arr, el) => (
  10 |     arr.concat(el)
  11 |   ), []);

这是我正在使用的代码:

const burger = (props) => {
  let transformedIngredients = Object.keys(props.ingredients).map(igKey => (
    // eslint-disable-next-line max-len,react/no-array-index-key
    [...Array(props.ingredients[igKey])].map((_, i) => <BurgerIngredient key={igKey + i} type={igKey} />)
  )).reduce((arr, el) => (
    arr.concat(el)
  ), []);

  if (transformedIngredients.length === 0) {
    transformedIngredients = <p>Please add some ingredients!</p>;
  }

我从这里传递成分:

class BurgerBuilder extends Component {
  state = {
    ingredients: {
      salad: 0,
      bacon: 0,
      cheese: 0,
      meat: 0,
    },
    totalPrice: 4,
  };
render() {
    return (
      <Fragment>
        <Burger ingredients={this.state.ingredients} />
        <BuildControls
          ingredientAdded={this.addIngredientHandler}
          ingredientRemoved={this.removeIngredientHandler}
        />
      </Fragment>
    );
  }

最佳答案

如果其中一种成分具有负值,则可能会发生错误,例如:

state = {
  ingredients: {
    salad: -1, // this will cause the error
    bacon: 0,
    cheese: 0,
    meat: 0,
  },
  totalPrice: 4,
};

您可以通过确保不会在 Array 构造函数中传递负数来防止这种情况,例如,如果数字为负数,您可以传递 0:

[...Array(Math.max(0, props.ingredients[igKey]))]

关于javascript - 范围错误 : invalid array length,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57124269/

相关文章:

javascript - 为什么 class 是 JavaScript 中的保留字?

java - 基于另一个数组递增数组中的值

python - 在cython中使用C函数读写文件中的数组

JavaScript Array Map 返回空数组

reactjs - Jest - 无法使用动态导入模板字符串找到模块

reactjs - JSX 内的开关盒不工作 : ReactJS

javascript - 单击 puppeteer 中的元素后如何等待网络空闲?

javascript - JS中数字原型(prototype)的自定义迭代器

javascript - 计算数组中每个元素的频率 - javascript

MySQL RegExp如何匹配任意位置的所有给定字母