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)写法还有没有更方便的写法了
for of印象里是没法获取下标的...
至于更简单的方法坐等其他人给个解了
我基础比较差...
几种for循环都没记全 本帖最后由 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}
据说 for (i = i; i < len; i++) 这种最快
据说 字符串能转数组
据说 获取字节长度不是那么简单哦,要考虑中文日文外星文。。。
得蹲个大佬来 for (let of this.content_text.entries())
但是老实说这个做法有点“不务正业”,for...of设计出来就是只关心值不关心下标的,如果你想用下标遍历,直接传统for循环就可以了。另外for...in是用来遍历对象属性的,不应用于数组。
页:
[1]