剛剛開始的時候感覺不太難,越寫越發現之前忽略的可能性很多。
當只有一個變量的時候,把代碼寫出來不是特別困難。可當有兩個變量的時候,情況就復雜了很多。我在剛開始寫的時候就在想如何把冗余的代碼裁減掉,結果就是大腦宕機。最后老老實實的在紙上,用最笨的方法把所有的可能性都列出來,再去想如何把類似的代碼拿出來就變得很容易了。
所以,如果覺得大腦硬件不夠用了,那就用最笨的辦法先去把事情做了,然后再去優化。
最后寫出來的東西
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]));
// }