TypeError: Cannot read property 'length' of undefined react
TypeError: Cannot read property 'length' of undefined react
我正在用 React 做一个简单的练习。练习的目标是:
- 从数组中随机抽取水果
- 记录消息“请给我一个随机水果。”
- 记录消息“给你:RANDOMFRUIT”
- 记录消息“美味!我可以再来一份吗?[=39=]
- 从水果数组中移除水果
- 记录消息“对不起,我们都出去了。我们还剩下 FRUITSLEFT。
在运行这段代码中,我遇到了以下错误。出于某种原因,"length" 似乎是问题所在。
TypeError: Cannot read property 'length' of undefined
Module../src/index.js
C:/Users/jaina/Desktop/ReactAPPS/exercise1/exercise-one/src/index.js:15
12 | // Remove the fruit from the array of fruits
13 | let remaining = remove(foods, fruit);
14 | // Log the message “I’m sorry, we’re all out. We have FRUITSLEFT left.”
> 15 | console.log(`I’m sorry, we’re all out. We have ${remaining.length} other foods left.`);
16 |
它还说 __webpack_require__
以及其他 webpack 警告。但我假设不 运行 的主要原因是 "length" 未定义。
index.js
import foods from './foods';
import { choice, remove } from './helpers';
// Randomly draw a fruit from the array
let fruit = choice(foods);
// Log the message “I’d like one RANDOMFRUIT, please.”
console.log(`I’d like one ${fruit}, please.`);
// Log the message “Here you go: RANDOMFRUIT”
console.log(`Here you go: ${fruit}`);
// Log the message “Delicious! May I have another?”
console.log('Delicious! May I have another?');
// Remove the fruit from the array of fruits
let remaining = remove(foods, fruit);
// Log the message “I’m sorry, we’re all out. We have FRUITSLEFT left.”
console.log(`I’m sorry, we’re all out. We have ${remaining.length} other foods left.`);
Foods.js
const foods = [
"", "", "", "", "", "", "", "",
"", "", "", "", "", "", "",
];
export default foods;
helper.js
function choice(items){
let idx = Math.floor(Math.random()* items.length);
}
function remove(items, item){
for (let i = 0; i < items.length; i++){
if(items[i] === item){
return [ ...items.slice(0,i), ...items.slice(i+1)];
}
}
}
export {choice, remove};
感谢任何帮助。
在helper.js
中,如果你的函数remove
没有找到任何东西,它将return未定义。然后,当你说...
console.log(`I’m sorry, we’re all out. We have ${remaining.length} other foods left.`);
...您假设 remaining
是一个数组,但它实际上是未定义的。
尝试将 return items;
放在 remove
函数的末尾,在 for 循环之后。
在您上面的代码中,return items
以防在 remove
函数中找不到任何内容。
function remove(items, item){
for (let i = 0; i < items.length; i++){
if(items[i] === item){
return [ ...items.slice(0,i), ...items.slice(i+1)];
}
}
// change this to whatever you want in case it was able to find item to remove
return items;
}
您的问题似乎出在这里:
function choice(items){
let idx = Math.floor(Math.random()* items.length);
}
所以let fruit = choice(foods)
,fruit永远是未定义的。
尝试 return 辅助函数的值,如下所示:
function choice(items){
let fruitIndex = Math.floor(Math.random()* items.length);
return items[fruitIndex];
}
你还应该找到选择的索引和return水果,否则choice
将return只有一个数字。
修改您的选择并删除功能
function choice(items) {
return Math.floor(Math.random()*items.length);
}
function remove(items, item) {
return items.filter(e => e !== item);
};
我正在用 React 做一个简单的练习。练习的目标是:
- 从数组中随机抽取水果
- 记录消息“请给我一个随机水果。”
- 记录消息“给你:RANDOMFRUIT”
- 记录消息“美味!我可以再来一份吗?[=39=]
- 从水果数组中移除水果
- 记录消息“对不起,我们都出去了。我们还剩下 FRUITSLEFT。
在运行这段代码中,我遇到了以下错误。出于某种原因,"length" 似乎是问题所在。
TypeError: Cannot read property 'length' of undefined
Module../src/index.js
C:/Users/jaina/Desktop/ReactAPPS/exercise1/exercise-one/src/index.js:15
12 | // Remove the fruit from the array of fruits
13 | let remaining = remove(foods, fruit);
14 | // Log the message “I’m sorry, we’re all out. We have FRUITSLEFT left.”
> 15 | console.log(`I’m sorry, we’re all out. We have ${remaining.length} other foods left.`);
16 |
它还说 __webpack_require__
以及其他 webpack 警告。但我假设不 运行 的主要原因是 "length" 未定义。
index.js
import foods from './foods';
import { choice, remove } from './helpers';
// Randomly draw a fruit from the array
let fruit = choice(foods);
// Log the message “I’d like one RANDOMFRUIT, please.”
console.log(`I’d like one ${fruit}, please.`);
// Log the message “Here you go: RANDOMFRUIT”
console.log(`Here you go: ${fruit}`);
// Log the message “Delicious! May I have another?”
console.log('Delicious! May I have another?');
// Remove the fruit from the array of fruits
let remaining = remove(foods, fruit);
// Log the message “I’m sorry, we’re all out. We have FRUITSLEFT left.”
console.log(`I’m sorry, we’re all out. We have ${remaining.length} other foods left.`);
Foods.js
const foods = [
"", "", "", "", "", "", "", "",
"", "", "", "", "", "", "",
];
export default foods;
helper.js
function choice(items){
let idx = Math.floor(Math.random()* items.length);
}
function remove(items, item){
for (let i = 0; i < items.length; i++){
if(items[i] === item){
return [ ...items.slice(0,i), ...items.slice(i+1)];
}
}
}
export {choice, remove};
感谢任何帮助。
在helper.js
中,如果你的函数remove
没有找到任何东西,它将return未定义。然后,当你说...
console.log(`I’m sorry, we’re all out. We have ${remaining.length} other foods left.`);
...您假设 remaining
是一个数组,但它实际上是未定义的。
尝试将 return items;
放在 remove
函数的末尾,在 for 循环之后。
在您上面的代码中,return items
以防在 remove
函数中找不到任何内容。
function remove(items, item){
for (let i = 0; i < items.length; i++){
if(items[i] === item){
return [ ...items.slice(0,i), ...items.slice(i+1)];
}
}
// change this to whatever you want in case it was able to find item to remove
return items;
}
您的问题似乎出在这里:
function choice(items){
let idx = Math.floor(Math.random()* items.length);
}
所以let fruit = choice(foods)
,fruit永远是未定义的。
尝试 return 辅助函数的值,如下所示:
function choice(items){
let fruitIndex = Math.floor(Math.random()* items.length);
return items[fruitIndex];
}
你还应该找到选择的索引和return水果,否则choice
将return只有一个数字。
修改您的选择并删除功能
function choice(items) {
return Math.floor(Math.random()*items.length);
}
function remove(items, item) {
return items.filter(e => e !== item);
};