使用下标索引方式问题

来源: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回答

好帮手慕小李

2023-02-18

同学你好,从代码逻辑上来看同学是想一个if解决问题,但是这个思路是有偏差的。在判断语句中同学使用如下:

https://img.mukewang.com/climg/63f0501b0900e14706320256.jpg

index小于等于length那么老师这里猜想的是同学是想用obj中自带的length当做判断条件,那么这里首先就是有问题的点(不是不可以,而是方式不对后面有例子)可以打印一下length的值会发现它总是0如下:

https://img.mukewang.com/climg/63f0508309925f7503700077.jpg

如果是想用obj中的length那么则需要写入obj.length如下:

https://img.mukewang.com/climg/63f050c1093ffe7f05960253.jpg

https://img.mukewang.com/climg/63f050d409c77ae102830090.jpg

那么为什么虽然说length已经调整过来了,为什么还会没有打印后续的问题。如下:

https://img.mukewang.com/climg/63f05136098b6f3706570527.jpg

https://img.mukewang.com/climg/63f0514209abaf9903580096.jpg

这里出现2个undefined,这是因为如下:

https://img.mukewang.com/climg/63f0517c0976054805180097.jpg

结合数据来看obj[0]是xm,但是obj[1]在obj中是没有对应的key的,所以是undefined,obj[2]也同样是undefined。

所以这个思路是有偏差的。后面老师会用同学的思路给出两个优化版本。

以下思路仅供参考:

方法一(入门)

https://img.mukewang.com/climg/63f05397095d70ff05180401.jpg

https://img.mukewang.com/climg/63f053bf09075da902720070.jpg

方法二(使用obj.length)

首先我们要明确一点,既然length是数字,但是obj中的key是非数字,那么使用数字去访问就是访问不到的。

所以这里我们需要知道怎么得到对象中的key。如下:

https://img.mukewang.com/climg/63f05493095bd17f06270200.jpg

https://img.mukewang.com/climg/63f054f109397d5802890044.jpg

使用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"]去访问,则就可以得到其中对应的值了。如下:

https://img.mukewang.com/climg/63f05635097ba41306540533.jpg

https://img.mukewang.com/climg/63f0563c09ffffcc02690076.jpg

同学自己试试,祝学习愉快!

1

0 学习 · 17877 问题

查看课程