刚刚开始的时候感觉不太难,越写越发现之前忽略的可能性很多。
当只有一个变量的时候,把代码写出来不是特别困难。可当有两个变量的时候,情况就复杂了很多。我在刚开始写的时候就在想如何把冗余的代码裁减掉,结果就是大脑宕机。最后老老实实的在纸上,用最笨的方法把所有的可能性都列出来,再去想如何把类似的代码拿出来就变得很容易了。
所以,如果觉得大脑硬件不够用了,那就用最笨的办法先去把事情做了,然后再去优化。
最后写出来的东西
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
| Array.prototype.mySlice = function () { var n = arguments[0]; var m = arguments[1]; if (n >= 0) { var nN = Math.floor(n); }else { var nN = Math.ceil(n); } if (m >= 0) { var nM = Math.floor(m); }else { var nM = Math.ceil(m); } var aArray1 = []; if (arguments.length == 1) { if (nN <= -this.length) { for (var i = 0; i < this.length; i++) { aArray1[i] = this[i]; } return aArray1; } else if (nN > -this.length && nN < 0) { for (var i = 0; i < -nN; i++) { aArray1[i] = this[nN + this.length + i]; } return aArray1; }else if (nN == 0) { for (var i = 0; i < this.length; i++) { aArray1[i] = this[i]; } return aArray1; }else if (nN > 0 && nN <= this.length) { for (var i = 0; i < this.length - nN; i++) { aArray1[i] = this[nN + i] } return aArray1; } else { return []; } } else { if (nN + 1 > this.length) { return []; }else if (nM < -this.length) { return []; }else { if (nN >= 0) { if (nM >= 0 && nM <= this.length-1) { if (nN >= nM) { return []; }else { for (var i = 0; i < (nM - nN); i++) { aArray1[i] = this[nN + i]; } return aArray1; } } else if (nM > this.length-1) { for (var i = 0; i < this.length - nN; i++) { aArray1[i] = this[nN + i]; } return aArray1; } else if (nM <= -1) { if ((-nM + nN) >= this.length) { return []; }else { for (var i = 0; i < (this.length + nM - nN); i++) { aArray1[i] = this[nN + i]; } return aArray1; } } else { return []; }
} else if (nN <= -1 && nN > -this.length) { if (nM > 0 && nM <= this.length-1) { if (- nN + nM <= this.length) { return []; }else { for (var i = 0; i < nM - nN - this.length; i++) { aArray1[i] = this[nN + this.length + i]; } return aArray1; } } else if (nM > this.length-1) { for (var i = 0; i < -nN; i++) { aArray1[i] = this[this.length + nN + i]; } return aArray1; } else if (nM <= -1) { if (nN < nM) { for (var i = 0; i < (nM - nN); i++) { aArray1[i] = this[this.length + nN + i]; } return aArray1; }else { return []; } } else { return []; } } else { if (nM > 0 && nM <= this.length -1) { for (var i = 0; i < nM; i++) { aArray1[i] = this[i]; } return aArray1; }else if (nM <= -1 && nM > -this.length) { for (var i = 0; i < (this.length + nM); i++) { aArray1[i] = this[i]; } return aArray1; }else if (nM > this.length-1) { for (var i = 0; i < this.length; i++) { aArray1[i] = this[i] } return aArray1; } else { return []; } } } } } //测试部分。 var aTest = [0, 1, 2, 3, 4]; var b = []; for (var i = 0; i < 10; i++) { var n = Math.random() * 100 - 50; b[i] = n; } for (var i = 0; i < b.length; i++) { for (var j = 0; j <b.length; j++) { console.log(b[i], b[j]); console.log(aTest.slice(b[i], b[j])); console.log(aTest.mySlice(b[i], b[j])); } } //测试一个参数的情况。 // for (var i = 0; i < a.length; i++) { // console.log(b[i]); // console.log(aTest.slice(b[i])); // console.log(aTest.mySlice(b[i])); // }
|