- 当前 Bug 的表现(可附上截图)
做了一个阅读器,记录用户阅读过的章节,要求用户凡是看过的章节如果是连续则合并在一起,正序排列,如用户看了
1,2,3,4,5章, 则显示 1-5, 如果用户看了1,3,2,4,5 也显示1-5, 如果用户看了 1,2,3,5,6,7,9,11章,则显示 1-3,5-7,9,11 章,
我的代码如下:
//数组去重函数
array_unique: function(arr) {
for (var i = 0; i < arr.length; i++) {
for (var j = i + 1; j < arr.length; j++) {
if (arr[i] == arr[j]) {
arr.splice(j, 1);
j--;
}
}
}
return arr;
},
let readfoot = [];//定义数组
readfoot.push(page);//此处省略,功能是记录所有页码,这是前提
正式代码如下:
readfoot = that.array_unique(readfoot);//去重
readfoot = readfoot.sort(function (a, b) { return a - b; });//排序
let readfoot2 = [];
let readfoot_start = readfoot[0];//第一个数字
let readfoot3 = [];
let lianxu_flag = false;// 判断目录是否连续
if (readfoot.length > 1) {// 如果读的不只一章
for (var i = 1; i < readfoot.length; i++) {
if (readfoot[i] != (readfoot[i - 1] + 1)) {// 判断后一个是否等于前一个值 +1
if (lianxu_flag) {// 如果后一个值等于前一个值 +1 ,那么就是连续的,连续的以数组的形式存
readfoot3.push([readfoot_start, readfoot[i - 1]]);
} else {
readfoot3.push(readfoot_start);//不连续的存单个的字符
}
readfoot_start = readfoot[i];
if (i == readfoot.length - 1) { //如果是最后一个元素,则结束
readfoot3.push(readfoot_start);
}
lianxu_flag = false;
} else {// 如果后一个值等于前一个值 +1 ,那么就是连续的
lianxu_flag = true;
if (i == readfoot.length - 1) {//如果是最后一个元素,则结束
readfoot3.push([readfoot_start, readfoot[i]]);
}
}
}
} else {
readfoot3.push(readfoot_start); // 只有一章则只存一章
}
for (let k in readfoot3) {
if ((typeof readfoot3[k]).toLowerCase() == 'object') {//如果存的是数组
readfoot2.push(readfoot3[k].join('-'));
} else {//如果存的是单个字符
readfoot2.push(readfoot3[k]);
}
}
readfoot2 = readfoot2.join(',');
- 预期表现
经过测试, 以上代码适用, 但是,但是会有我搞不懂的bug!!
偶尔, 偶尔会出现这种字符串: 只读第四张,出现 4,function(){for(var e=this.length,a=void 0;e;){var n=[this[a=Math.random()*e-->>>0],this[e]];this[e]=n[0],this[a]=n[1]}return this}, 我只读了第四章,不知道什么意思。 检查后面字符串, 发现是之前定义的一个属性内容:如下
Array.prototype.shuffle = function () {
let m = this.length, i;
while (m) {
i = (Math.random() * m--) >>> 0;
[this[m], this[i]] = [this[i], this[m]]
}
return this;
};
所以我只读了第 4 章, 却出现 4,function(){for(var e=this.length,a=void 0;e;){var n=[this[a=Math.random()*e-->>>0],this[e]];this[e]=n[0],this[a]=n[1]}return this} 是什么意思? 我定义的 Array.prototype.shuffle 这个函数被 当做 我目前这个数组 的值 做为 join 函数的参数传递了?????
这是bug吗?! 怎么解决, 我实在不知道怎么解决。 而且这个不好复现, 我 Array.prototype 这样定义过不只shuffle这一个函数,其他这样定义的函数也曾出现过在console.log()的值里, 怎么解决 ,help help help!!! 求解答
- 复现路径
- 提供一个最简复现 Demo