获取ESV圣经对象随机属性问题求助:为何返回undefined?
解决随机获取圣经卷名返回undefined的问题
嘿,我一眼就发现问题所在啦!你的代码逻辑里有个关键误区:
问题根源
你定义的esvObject是一个键为卷名字符串的普通对象,不是数组。对象的属性只能通过对应的键(比如"Genesis")来访问,而不能像数组那样用数字索引(比如esvObject[1])。所以当你生成随机数randNum后,直接用它去访问esvObject的属性,自然会返回undefined——因为这个对象根本没有以数字为键的属性。
修复方案
我们需要先把对象里的所有卷名提取成一个数组,再用随机数作为数组索引来获取随机卷名。具体步骤如下:
- 使用
Object.keys(esvObject)提取对象的所有键(也就是圣经卷名),得到一个卷名数组; - 基于这个数组的长度生成随机索引(而不是硬编码66,这样代码更灵活);
- 通过数组索引拿到随机卷名。
修正后的代码
var esvObject = { "Genesis": { "1": {}, "2": {}, "3": {} }, "Exodus": { "1": {}, "2": {}, "3": {} } }; // 提取所有圣经卷名到数组 const bookNames = Object.keys(esvObject); // 生成对应数组长度的随机索引 const randIndex = Math.floor(Math.random() * bookNames.length); // 获取随机卷名 const randBook = bookNames[randIndex]; console.log(randBook); // 会输出"Genesis"或"Exodus"等卷名
额外优化点
用bookNames.length代替固定的66,哪怕你在测试时只放了2卷书,代码也能正确生成随机索引,避免出现索引越界的问题,让代码更健壮。
内容的提问来源于stack exchange,提问作者Caleb
相关产品推荐
相关产品推荐

