使用下标索引方式问题
来源:2-11 编程练习
TKXZ
2023-02-18 11:56:20
相关代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <script> const obj = { "0": "xm", "sex": "male", length: 2 } // 在此补充代码 obj[Symbol.iterator] = () => { let index = 0; return { next() { let value, done; if(index <= length){ value = obj[index]; done = false; } else{ done = true; } index++; return { value, done }; } }; } for (const item of obj){ console.log(item); } </script> </body> </html>
问题描述:
只能打印出第一个值, 剩余两个值无法显示
1回答
同学你好,从代码逻辑上来看同学是想一个if解决问题,但是这个思路是有偏差的。在判断语句中同学使用如下:
index小于等于length那么老师这里猜想的是同学是想用obj中自带的length当做判断条件,那么这里首先就是有问题的点(不是不可以,而是方式不对后面有例子)可以打印一下length的值会发现它总是0如下:
如果是想用obj中的length那么则需要写入obj.length如下:
那么为什么虽然说length已经调整过来了,为什么还会没有打印后续的问题。如下:
这里出现2个undefined,这是因为如下:
结合数据来看obj[0]是xm,但是obj[1]在obj中是没有对应的key的,所以是undefined,obj[2]也同样是undefined。
所以这个思路是有偏差的。后面老师会用同学的思路给出两个优化版本。
以下思路仅供参考:
方法一(入门)
方法二(使用obj.length)
首先我们要明确一点,既然length是数字,但是obj中的key是非数字,那么使用数字去访问就是访问不到的。
所以这里我们需要知道怎么得到对象中的key。如下:
使用Object.keys(对象)这样就可以得到对象中的所有key值。
既然得到了key值,那么我们按照obj.length进行一步一步走的时候,是不是直接访问
obj[Object.keys(obj)[index]]就可以了,其中Object.keys(obj)[index]就是['0','sex','length']它们中的某一个。
如Object.keys(obj)[index]当index是0时则对应的就是['0','sex','length']中的0。
如Object.keys(obj)[index]当index是1时则对应的就是['0','sex','length']中的"sex"。
如Object.keys(obj)[index]当index是2时则对应的就是['0','sex','length']中的"length"。
那么在用obj[0]、obj["sex"]、obj["length"]去访问,则就可以得到其中对应的值了。如下:
同学自己试试,祝学习愉快!
相似问题