被虐日記----开心并快乐着的求各种虐

    xiaoxiao2021-03-25  87

    只有被虐了才会发现自己的不足,才能激励自己更好的学习

    第一、一个简单的函数

    (function() { console.log(a + 1); //NaN var a = 2; })();

    其实很简单吧,我却把他当成了 undefined1,当做字符拼接了。

    第二、闭包的使用

    function A(){ var funs=[]; for(var i=0;i<10;i++){ funs[i]=function(){ return i; } } return funs; } var funs = A();//定义funs[0]-funs[9],10个函数 console.log(funs[0]());//10 console.log(funs[1]());//10 console.log(funs[6]());//10

    这里是i是全局变量最后输出的都是一个i。用闭包解决

    function A() { var funs = []; for (var i = 0; i < 10; i++) { var j = i; (function(arg) { funs[i] = function() { return arg; } })(j) } return funs; } var funs = A(); //定义funs[0]-funs[9],10个函数 console.log(funs[0]()); //0 console.log(funs[1]()); //1 console.log(funs[6]()); //6

    第三、js数组去重

    有这样一个数组,成员都是数字,例如 var a = [1,2,3,4,5,2,3,4,6,7,8…….n]; 请实现a.unique()方法,用来给数组a去掉重复值,要求对Array的原型进行扩展方法,并尽可能做到效率最优。

    答案一

    var a = [1, 2, 3, 4, 5, 2, 3, 4, 6, 7, 8]; Array.prototype.unique= function() { var b = [],//记录重复数字的位置, oa = this.concat(); // 将原来数据赋值给oa数组 for (var i = 1; i < oa.length; i++) { for (var j = 0; j < i; j++) { if (b.indexOf(j) > -1) continue; //如过下表j在数组b中跳出当前循环 if (oa[j] == oa[i]) { b.push(j); } } } this.splice(0, this.length); //将原数组清空成为空数组 //遍历数组 for (var i = 0; i < oa.length; i++) { //判断下标是否在b中,如果存在则大于-1。则不重新加入数组 if (b.indexOf(i) > -1) continue; this.push(oa[i]); } return this; } var d = a.unique();

    答案二

    var a = [1, 2, 3, 4, 5, 2, 3, 4, 6, 7, 8]; Array.prototype.unique = function() { //遍历数组 for (var i = 0; i < this.length; i++) { //将第i的值赋值给n。 var n = this[i]; //从当前数组移除,并不插入null,这里是先去除一种一个,如果这时候还能通过indexof找到,那说明该值不值一个 this.splice(i, 1, null); if (this.indexOf(n) < 0) { //如果不重复则重新插入 this.splice(i, 1, n); //不存在重复 } else { this.splice(i, 1); //存在重复 } } return this; }; var d = a.unique();

    答案三(目前认为最好的办法)

    Array.prototype.unique = function() { var result = [this[0]]; this.sort(); this.forEach(function(v) { v != result[result.length - 1] && result.push(v); //仅与result最后一个元素比较,当不相等的时候,则加到result数组中。 }); return result; }

    还有其他答案等测试完了再贴出来,欢迎大神提出更好的方法,来让大家一起进步

    转载请注明原文地址: https://ju.6miu.com/read-25707.html

    最新回复(0)