function WArray() { //å®ä¹ä¸ä¸ª wArray 彿° ï¼å¨JavaScriptä¸ä¸åçå¯¹è±¡ï¼æä»¥è¿æ¯å®ä¹ä¸ä¸ª wArray对象 this.value = []; // åå§å wArray对象 æ¶ï¼éé¢å®ä¹ ä¸ä¸ªç©ºæ°ç»ï¼å°æ¥ç¨æ¥è£ æ°æ®çå®¹å¨ this.length = 0; //å 为æ¯ç©ºæ°ç»ï¼æä»¥ç°å¨çé¿åº¦æ¯0 //ç¼ºå°æ¹æ³æ³¨é // this.push = function (item1) { // ä¼ éä¸ä¸ªåæ° //1ãå½ä¼ å ¥çåæ° æ¯åä¸ç±»åãç¶æãä¸ªæ°æ¶ï¼å¯ä»¥ç¨ && çè·¯ä¸é»è¾è¿ç®ç¬¦ å夿 //2ãå½ä¼ å ¥çåæ° æ¯ä¸åç±»åãç¶æãä¸ªæ°æ¶ï¼éè¦ç¨ || çè·¯æé»è¾è¿ç®ç¬¦ å夿 //3ã缺å°å夿 item1.length == 0 å½ä¼ å ¥çåæ°çé¿åº¦ä¸º 0 ,没ææä¹ç弿¶,å°±æå¼å¸¸ // if (item1 == undefined && item1 == null) { // throw new error('å ¥åä¸åæ³'); //3ãæåºå¼å¸¸ï¼è®°å¾ 大å new Error() // } //4ãæ²¡åtry...catch å 裹é»è¾å¼å¸¸æ¶å¤ç // this.value = item1; // this.length++; // å½ä¼ éä¸ä¸ªåæ°è¿æ¥ å¯ä»¥éè¿ ++ èªå¢+1 ï¼æ¥åæ¥ å å ¥æ°æ®åï¼æ°ç»ç´¢å¼é¿åº¦çåå // // for (let i = val.length, j = 0; j < item.length; i++, j++) { // // val[i] = item[j] // // } // return this.length ; //push()æ¹æ³ æ¯è¿åæ·»å æ°å ç´ åçæ°ç»é¿åº¦ // } /** * pushï¼ï¼æ¹æ³ç¨äºå¨æ°ç»çæ«ç«¯æ·»å æ°ç»çå ç´ ï¼å¹¶è¿åæ·»å æ°å ç´ åçæ°ç»é¿åº¦ã * å¦æå ¥åä¸åæ³ï¼å°ä¼æé; * 妿è¿è¡åºéï¼å°ä¼è¿å空æ°ç»ã * @param {...any} item1 * @returns */ this.push = function (...item1) { // å½ä¼ å ¥å¤ä¸ªåæ°å ¥æ¥æ¶ å¯ç¨ ...å½¢åå 表示 // console.log(' item1.length: ', item1.length); // if (item1 == undefined && item1 == null && item1.length == 0) { // throw new Error('å ¥åä¸åæ³'); // } if (item1 == undefined || item1 == null || item1.length == 0) { throw new error('å ¥åä¸åæ³'); } for (let i = this.value.length, j = 0; j < item1.length; i++, j++) { this.value[i] = item1[j] } this.length += item1.length; return this.length; }; /** * valueof()æ¹æ³è¿åæ°ç»æ¬èº«ã * @returns this.value */ this.valueof = function () { //1ã夿 this.value ä¸ææ²¡æå ç´ ï¼æ²¡æå°±æåº å¼å¸¸ if (this.value.length == 0) { throw new Error('æ æ°æ®æ æ³è¿åæ°ç»æ¬èº«') }; return this.value; } /** * toString()æ¹æ³è¿å æ°ç»çåç¬¦ä¸²å½¢å¼ * 1ã夿 this.value ä¸ææ²¡æå ç´ ï¼æ²¡æå°±æåº å¼å¸¸ * @returns stringResult */ this.toString = function () { //1ã夿 this.value ä¸ææ²¡æå ç´ ï¼æ²¡æå°±æåº å¼å¸¸ if (this.value.length == 0) { throw new Error('æ æ°æ®æ æ³è¿åæ°ç»æ¬èº«') }; // if (StringStr == undefined || StringStr == null || StringStr.length == 0) { // StringStr = ',';// å½undefined/null/空å符串æ¶ï¼é»è®¤æ¯éå· // } let stringResult = ''; let StringStr = ','; for (var i = 0; i < this.value.length; i++) { let valString = this.value[i]; stringResult += valString; stringResult += StringStr; } return stringResult; } /** * pop æ¹æ³ç¨äºå 餿°ç»çæåä¸ä¸ªå ç´ ï¼å¹¶è¿å该å ç´ ãè¯¥æ¹æ³ä¼æ¹ååæ°ç» * @returns pval */ this.pop = function () { //1ã夿 this.value ä¸ææ²¡æå ç´ ï¼æ²¡æå°±æåº å¼å¸¸ if (this.value.length == 0) { throw new Error('å 鍿 æ°æ®å·²æ æ³å é¤') } let pval = this.value[this.value.length - 1]; this.value.length--; return pval; }; /** * shiftæ¹æ³ç¨äºå 餿°ç»ç第ä¸ä¸ªå ç´ ï¼å¹¶è¿å该å ç´ ã * @returns */ this.shift = function () { //1ã夿 this.value ä¸ææ²¡æå ç´ ï¼æ²¡æå°±æåº å¼å¸¸ if (this.value.length == 0) {// æ åµ1ï¼ å½ value == [] throw new Error('å 鍿 æ°æ®å·²æ æ³å é¤') } let sval = this.value[0]; // å°æ°ç»çåä¸é¡¹èµå¼ç»åä¸é¡¹ for (let i = 0; i < this.value.length; i++) { this.value[i] = this.value[i + 1]; //i:å ç´ ä¸æ + 1 } if (this.value.length > 1) {//廿æ°ç»æåä¸é¡¹ this.value.length = this.value.length - 1; } return sval; }; /** * unshift æ¹æ³ç¨äºå¨æ°ç»ç第ä¸ä¸ªä½ç½®æ·»å å ç´ ï¼å¹¶è¿åæ·»å æ°å ç´ åçæ°ç»é¿åº¦ã * @param {...any} UNshift * @returns */ this.unshift = function (...UNshift) { //1ã夿 å ¥åæ¯å¦åæ³ ï¼æ²¡æå°±æåº å¼å¸¸ if (UNshift == undefined || UNshift == null || UNshift.length == 0) { throw new error('å ¥åä¸åæ³'); } let uval = []; for (let i = uval.length, j = 0; j < UNshift.length; i++, j++) { uval[i] = UNshift[j] } for (let k = uval.length, h = 0; h < this.value.length; k++, h++) { uval[k] = this.value[h] } this.length = uval.length; this.value = uval; return this.length; }; /** * join æ¹æ³ä»¥æå®çåæ°ä½ä¸ºåé符ï¼å°æææ°ç»æåè¿æ¥æä¸ä¸ªå符串è¿åã * 妿䏿ä¾åæ°ï¼é»è®¤ç¨éå·åéã * @param {...any} joinStr */ this.join = function (...joinStr) { //å¤æå ¥å joinStrï¼å¹¶ä¸å¦æä¸æä¾åæ°ï¼é»è®¤ç¨éå·åéã if (joinStr == undefined || joinStr == null || joinStr == 0) { joinStr = ',' } let result = ''; //åä¸ä¸è¦æ èªä¿®æ¹åæ°ç»çæ°æ®ï¼å¾é¾å¤å for (let i = 0; i < this.value.length; i++) { let item = this.value[i]; result += item; // result += joinStr; //使¯æåä¸ä½å ç´ å颿¯ä¸è½å æåé符ç //éè¿ä¸æ 夿æåä¸ä¸ªå ç´ æ¯æåç¡®çï¼è¿ééè¿ä¸æ æ¥å¤ææ°ç»ä¸æåä¸ä½å ç´ if (i != this.value.length - 1) { // 妿䏿¯æåä¸ä¸ªitem, å°±æ¼æ¥ã result += joinStr; } else { break; } } return result; }; /** * concat()æ¹æ³ ç¨äºå¤ä¸ªæ°ç»çåå¹¶ãå®å°æ°æ°ç»çæåï¼æ·»å å°åæ°ç»æåçåé¨ã * @param {...any} ConcatArr * @returns */ this.concat = function (...ConcatArr) { //1ã夿 å ¥åæ¯å¦åæ³ ï¼æ²¡æå°±æåº å¼å¸¸ if (ConcatArr == undefined || ConcatArr == null || ConcatArr.length == 0) { throw new error('å ¥åä¸åæ³'); } for (let i = this.value.length, j = 0; j < ConcatArr.length; i++, j++) { this.value[i] = ConcatArr[j]; } this.length += ConcatArr.length; return this.value; }; /** * reverse()æ¹æ³ç¨äºé¢ åæåæ°ç»å ç´ ãè¿ååååçæ°ç» * @returns this.value */ this.reverse = function () { //1ã夿 this.valueä¸ææ²¡æå ç´ ï¼æ²¡æå°±æåº å¼å¸¸ if (this.value.length == 0) {// æ åµ1ï¼ å½ value == [] throw new Error('å 鍿 æ°æ®å·²æ æ³å é¤') } for (let i = 0; i < this.value.length / 2; i++) {//0 1 2 3 let temp = this.value[i]; this.value[i] = this.value[this.value.length - 1 - i]; this.value[this.value.length - 1 - i] = temp; } return this.value; }; /** * mapï¼ï¼æ¹æ³ å°æ°ç»ç æææå 便¬¡ ä¼ å ¥åæ°ï¼ç¶åææ¯ä¸æ¬¡çæ§è¡ç»æ ç»æä¸ä¸ªæ°çæ°ç»è¿å * @returns mapArr */ this.map = function (callback) { if (typeof callback != 'function') { throw new Error("callback 䏿¯ä¸ä¸ª function") } let mapArr = []; for (let i = 0; i < this.value.length; i++) { mapArr[i] = callback(this.value[i]); } return mapArr; } /** * sliceï¼ï¼æ¹æ³ç¨äºæåç®æ æ°ç»çä¸é¨åï¼è¿åä¸ä¸ªæ°æ°ç»ï¼åæ°ç»ä¸åã * @param {...any} reverseArr */ this.slice = function (start, end) { let sliceArr1 = []; let sliceArr2 = []; if (start === undefined || null || 0) { return start = 0; } if (end === undefined || null || 0) { return end = this.value.length; } if (true) { start = start > this.value.length ? [] : start; end = start > end ? [] : end; for (let i = start; i < end; i++) { sliceArr1.push(this.value[i]); } return sliceArr1; } else { if (start < 0 || end < 0 || end > start) { sliceArr2 = this.value; sliceArr2.reverse(); start = start > sliceArr2.length ? [] : start; end = end < start ? [] : end; let sliceArr3 = []; for (let j = start; j < end; j++) { sliceArr3.push(this.sliceArr2[j]); } return sliceArr3; } } } } let wArray = new WArray(); // wArray.push(5); // wArray.push(4); // wArray.push(3); wArray.push(1, 2, 3, 4); console.log(`before: `, wArray); // wArray.push(); //è¿éå°±æ²¡ä¼ éæ°æ® // let ValueArr = wArray.valueof(); // console.log(`after: `, wArray); // console.log(`after: ValueArr = `, ValueArr); // let stringResult = wArray.toString(); // console.log(`after: `, wArray); // console.log(`after: stringResult = `, stringResult); // let popArray = wArray.pop(); // console.log(`after: `, wArray); // console.log(`after: popArray = `, popArray); // let shiftArray = wArray.shift(); // console.log(`after: `, wArray); // console.log(`after: shiftArray = `, shiftArray); // let UNshift = wArray.unshift('a', 'b') // console.log(`after: `, wArray); // console.log(`after: UNshift = `, UNshift); // let joinStr = wArray.join4('|'); // console.log(`after: `, wArray); // console.log(`after: joinStr = `, joinStr); // let ConcatArr = wArray.concat('[5,6],[8,9]'); // console.log(`after: `, wArray); // console.log(`after: ConcatArr = `, ConcatArr); // let reverseArr = wArray.reverse(); // console.log(`after: `, wArray); // console.log(`after: reverseArr = `, reverseArr); // let weicallback = function (x) { // return x + 1; // } // let mapArray = wArray.map(weicallback); // console.log(`after: `, wArray); // console.log(`after: mapArray = `, mapArray); let sliceArray = wArray.slice(1, 2); console.log('after:', wArray); console.log("after : sliceArray = ", sliceArray)