我想从对象的键中获取一个数组,但是当对象为空时长度应该为 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/