player 发表于 2022-3-20 14:50:35

for of 对象数组时如何获取下标

    showByteLen() {

      let i,
            text,
            byte,
            byteId,
            bytelen;

      //计算字符串字节长度
      let byteLen = str => {

            let bytelen = 0;

            if (str != undefined) {

                if (str == "" || str.length == 0) {

                  return bytelen;

                } else {

                  for (let i in str) {

                        if (str.charCodeAt(i) > 255) {

                            bytelen += 2;
                        }
                        else {

                            bytelen++;
                        }
                  }
                  return bytelen;

                }
            }

      }
      for (let c of this.content_text) {
            //console.log(i);

            //获取评论内容
            text = c.innerText;
            //console.log(this.content_text);
            //console.log(Object.values(this.content_text).indexOf(c));


            //字节长度
            bytelen = byteLen(text);

            //创建显示字节长度的标签

            //byteId = "byte" + i;//报错
            byteId = "byte" + Object.values(this.content_text).indexOf(c);
            let ele = document.createElement("div");
            ele.setAttribute("id", byteId);
            ele.innerText = "is null";

            //将标签添加在评论下面
            c.appendChild(ele);
    }
}
我用for in时最后会有一个entries,导致appendChild报错,所以改成for of,
我想要与this.content_text对象同步的下标值,
除去Object.values(this.content_text).indexOf(c)写法还有没有更方便的写法了




李恒道 发表于 2022-3-20 15:36:41

for of印象里是没法获取下标的...
至于更简单的方法坐等其他人给个解了
我基础比较差...
几种for循环都没记全

Hangover 发表于 2022-3-20 16:02:49

本帖最后由 Hangover 于 2022-3-20 16:08 编辑

for of获取数组对象下标
let arr = [
    { "key": 1, "value": 123 },
    { "key": 2, "value": 1234 },
    { "key": 3, "value": 12345 },
    { "key": 4, "value": 123456 },
    { "key": 5, "value": 1234567 },
]
for (let i of arr.keys()) {
    console.log(i,arr)
}

// => 0 {key: 1, value: 123}
// => 1 {key: 2, value: 1234}
// => 2 {key: 3, value: 12345}
// => 3 {key: 4, value: 123456}
// => 4 {key: 5, value: 1234567}


脚本体验师001 发表于 2022-3-20 16:15:07

据说 for (i = i; i < len; i++) 这种最快
据说 字符串能转数组
据说 获取字节长度不是那么简单哦,要考虑中文日文外星文。。。
得蹲个大佬来

cxxjackie 发表于 2022-3-20 20:23:14

for (let of this.content_text.entries())
但是老实说这个做法有点“不务正业”,for...of设计出来就是只关心值不关心下标的,如果你想用下标遍历,直接传统for循环就可以了。另外for...in是用来遍历对象属性的,不应用于数组。
页: [1]
查看完整版本: for of 对象数组时如何获取下标