function LArray() { this.value = []; // åå§å lArray对象 æ¶ï¼éé¢å®ä¹ ä¸ä¸ªç©ºæ°ç»ï¼å°æ¥ç¨æ¥è£ æ°æ®çå®¹å¨ this.length = 0; //å 为æ¯ç©ºæ°ç»ï¼æä»¥ç°å¨çé¿åº¦æ¯0 /** * pushï¼ï¼æ¹æ³ç¨äºå¨æ°ç»çæ«ç«¯æ·»å æ°ç»çå ç´ ï¼å¹¶è¿åæ·»å æ°å ç´ åçæ°ç»é¿åº¦ã * å¦æå ¥åä¸åæ³ï¼å°ä¼æé; * 妿è¿è¡åºéï¼å°ä¼è¿å空æ°ç»ã * @param {...any} item1 * @returns */ this.push = function (...item1) { // å½ä¼ å ¥å¤ä¸ªåæ°å ¥æ¥æ¶ å¯ç¨ ...å½¢åå 表示 if (item1 == undefined || item1 == null || item1.length == 0) { throw new error('å ¥åä¸åæ³'); } try { for (let i = this.value.length, j = 0; j < item1.length; i++, j++) { this.value[i] = item1[j] } this.length += item1.length; } catch (error) { //1ãè®°å½ç°åº åå ¥æ¥å¿ //2ãè¿éæ¯å¨æ§å¶å°è¾åºerroræ¥ç console.log(error) } 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('æ æ°æ®æ æ³è¿åæ°ç»æ¬èº«') }; // try { let stringResult = ''; let StringStr = ','; for (var i = 0; i < this.value.length; i++) { let valString = this.value[i]; stringResult += valString; stringResult += StringStr; } // } catch (error) { // console.log(error) // } return stringResult; }; /** * pop æ¹æ³ç¨äºå 餿°ç»çæåä¸ä¸ªå ç´ ï¼å¹¶è¿å该å ç´ ãè¯¥æ¹æ³ä¼æ¹ååæ°ç» * @returns pval */ this.pop = function () { //1ã夿 this.value ä¸ææ²¡æå ç´ ï¼æ²¡æå°±æåº å¼å¸¸ if (this.value.length == 0) { throw new Error('å 鍿 æ°æ®å·²æ æ³å é¤') } let pval2 = []; try { let pval2 = this.value[this.value.length - 1]; this.value.length--; } catch (error) { console.log(error) } return pval2, this.value; }; /** * shiftæ¹æ³ç¨äºå 餿°ç»ç第ä¸ä¸ªå ç´ ï¼å¹¶è¿å该å ç´ ã * @returns */ this.shift = function () { //1ã夿 this.value ä¸ææ²¡æå ç´ ï¼æ²¡æå°±æåº å¼å¸¸ if (this.value.length == 0) {// æ åµ1ï¼ å½ value == [] throw new Error('å 鍿 æ°æ®å·²æ æ³å é¤') } let sval = this.value[0]; try { // å°æ°ç»çåä¸é¡¹èµå¼ç»åä¸é¡¹ 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; } } catch (error) { console.log(error) } 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 = []; try { 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; } catch (error) { console.log(error) } return this.length; }; /** * join æ¹æ³ä»¥æå®çåæ°ä½ä¸ºåé符ï¼å°æææ°ç»æåè¿æ¥æä¸ä¸ªå符串è¿åã * 妿䏿ä¾åæ°ï¼é»è®¤ç¨éå·åéã * @param {...any} joinStr */ this.join = function (...joinStr) { //å¤æå ¥å joinStrï¼å¹¶ä¸å¦æä¸æä¾åæ°ï¼é»è®¤ç¨éå·åéã if (joinStr == undefined || joinStr == null || joinStr == 0) { joinStr = ',' } let result = ''; //åä¸ä¸è¦æ èªä¿®æ¹åæ°ç»çæ°æ®ï¼å¾é¾å¤å try { 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; } } } catch (error) { console.log(error) } return result; }; /** * concat()æ¹æ³ ç¨äºå¤ä¸ªæ°ç»çåå¹¶ãå®å°æ°æ°ç»çæåï¼æ·»å å°åæ°ç»æåçåé¨ã * @param {...any} ConcatArr * @returns */ this.concat = function (...ConcatArr) { //1ã夿 å ¥åæ¯å¦åæ³ ï¼æ²¡æå°±æåº å¼å¸¸ if (ConcatArr == undefined || ConcatArr == null || ConcatArr.length == 0) { throw new error('å ¥åä¸åæ³'); } try { for (let i = this.value.length, j = 0; j < ConcatArr.length; i++, j++) { this.value[i] = ConcatArr[j]; } this.length += ConcatArr.length; } catch (error) { console.log(error) } return this.value; }; /** * reverse()æ¹æ³ç¨äºé¢ åæåæ°ç»å ç´ ãè¿ååååçæ°ç» * @returns this.value */ this.reverse = function () { //1ã夿 this.valueä¸ææ²¡æå ç´ ï¼æ²¡æå°±æåº å¼å¸¸ if (this.value.length == 0) {// æ åµ1ï¼ å½ value == [] throw new Error('å 鍿 æ°æ®å·²æ æ³å é¤') } try { 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; } } catch (error) { console.log(error) } return this.value; }; /** * 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; } try { 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; } } } catch (error) { console.log(error) } }; /** * spliceæ¹æ³ç¨äºå é¤åæ°ç»çä¸é¨åæåï¼å¹¶å¯ä»¥å¨å é¤çä½ç½®æ·»å æ°çæ°ç»æåï¼ * è¿å弿¯è¢«å é¤çå ç´ ãæ³¨æï¼è¯¥æ¹æ³ä¼æ¹ååæ°ç»ã */ this.splice = function () { }; /** * sortæ¹æ³å¯¹æ°ç»æåè¿è¡æåºï¼é»è®¤æ¯æç §åå ¸é¡ºåºæåºãæåºåï¼åæ°ç»å°è¢«æ¹åã */ /** * åæ³¡æåº * @returns */ this.sort = function () { if (this.value.length == 0) { throw new Error("æ²¡ææ°æ®æ æ³è¿è¡æåº") } let sortVal = []; for (let i = 0; i < this.value.length; i++) { sortVal.push(this.value[i]) } for (let j = 0; j < sortVal.length; j++) { if (sortVal[j] > sortVal[j + 1]) { let temp = sortVal[j + 1]; sortVal[j + 1] = sortVal[j]; sortVal[j] = temp; } } return sortVal; }; /** * mapï¼ï¼æ¹æ³ å°æ°ç»ç æææå 便¬¡ ä¼ å ¥åæ°ï¼ç¶åææ¯ä¸æ¬¡çæ§è¡ç»æ ç»æä¸ä¸ªæ°çæ°ç»è¿å * @returns mapArr */ this.map = function (callback) { if (typeof callback != 'function') { throw new Error("callback 䏿¯ä¸ä¸ª function") } let mapArr = []; try { for (let i = 0; i < this.value.length; i++) { mapArr[i] = callback(this.value[i]); } } catch (error) { console.log(error) } return mapArr; }; /** *空æ°ç»outæ¯forEachæ¹æ³ç第äºä¸ªåæ°ï¼ * ç»æï¼åè°å½æ°å é¨çthiså ³é®åå°±æåoutã * @param {*} fcallback * @param {*} out * @returns */ this.forEach = function (fcallback, out) { if (typeof fcallback != 'function') { throw new Error("fcallback 䏿¯ä¸ä¸ª function") } if (out == undefined || out == null) { throw new Error('å ¥åä¸åæ³') } try { for (let k = 0; k < this.value.length; k++) { // this.value.push.call(out, fcallback(this.value[k])); // fcallback(this.value[k]).call(out) out.push(fcallback.call(out, this.value[k])); } } catch (error) { console.log(error) } return out; }; this.forEach2 = function (fcallback, out) { if (typeof fcallback != 'function') { throw new Error("fcallback 䏿¯ä¸ä¸ª function") } if (out == undefined || out == null) { throw new Error('å ¥åä¸åæ³') } try { for (let k = 0; k < this.value.length; k++) { console.log(fcallback.call(out, this.value[k])); } } catch (error) { console.log(error) } }; /** * filterï¼ï¼æ¹æ³ç¨äºè¿æ»¤ æ°ç»æåï¼æ»¡è¶³æ¡ä»¶çæåç»æä¸ä¸ªæ°æ°ç»è¿åã * @param {*} filterCallback * @returns */ this.filter = function (filterCallback, out1) { if (typeof filterCallback != 'function') { throw new Error("filterCallback 䏿¯ä¸ä¸ªfunction") } if (out1 == undefined || out1 == null) { throw new Error("å ¥åä¸åæ³") } let filtervalue = []; try { for (let i = 0; i < this.value.length; i++) { filtervalue.push.call(out1, filterCallback(this.value[i], i, this)); } } catch (error) { console.log(error) } return filtervalue; }; /** * some()类似 âæè¨âï¼assertï¼ï¼è¿åä¸ä¸ªå¸å°å¼ï¼è¡¨ç¤ºå¤ææ°ç»æåæ¯å¦ç¬¦åæç§æ¡ä»¶ã *å®ä»¬æ¥åä¸ä¸ªå½æ°ä½ä¸ºåæ°ï¼æææ°ç»æå便¬¡æ§è¡è¯¥å½æ°ã *è¯¥å½æ°æ¥åä¸ä¸ªåæ°ï¼å½åæåãå½åä½ç½®åæ´ä¸ªæ°ç»ï¼ç¶åè¿åä¸ä¸ªå¸å°å¼ã * @param {*} scallback * @returns */ this.some = function (scallback) { if (typeof scallback != 'function') { throw new Error("scallback 䏿¯ä¸ä¸ªfunction") } let someval = []; try { for (let i = 0; i < this.value.length; i++) { someval.push(scallback(this.value[i], i, this)); } if (someval == 0) { return false; } else { return someval; } } catch (error) { console.log(error) } }; /** * every()æ¹æ³æ¯æææåçè¿åå¼é½æ¯trueï¼æ´ä¸ªeveryæ¹æ³æè¿åtrueï¼å¦åè¿åfalseã * @param {*} ecallback * @returns */ this.every = function (ecallback) { if (typeof ecallback != 'function') { throw new Error("ecallback 䏿¯ä¸ä¸ªfunction") } let everyval = []; try { for (let i = 0; i < this.value.length; i++) { everyval.push(ecallback(this.value[i], i, this)); } } catch (error) { console.log(error) } return everyval; }; /** * reduceï¼ï¼æ¹æ³ æ±åºæ°ç»æææåçåã * ä»å·¦å°å³å¤çï¼ä»ç¬¬ä¸ä¸ªæåå°æåä¸ä¸ªæåï¼ç¸å * @param {*} reduceCallback * @returns */ this.reduce = function (number) { if (this.value.length == 0) { throw new Error("æ²¡ææ°æ®æ æ³è¿è¡æåº") } if (number == undefined || number == null || number == 0) { throw new error('å ¥åä¸åæ³'); } try { let val = this.value; let val1 = new Number; val1 = ((val[0] + val[val.length - 1]) * val[val.length - 1] / 2) + number; } catch (error) { console.log(error) } return val1; }; /** * indexOfæ¹æ³è¿åç»å®å ç´ å¨æ°ç»ä¸ç¬¬ä¸æ¬¡åºç°çä½ç½®ï¼å¦ææ²¡æåºç°åè¿å-1ã * @param {*} numberindex * @returns */ this.indexOf = function (numberindex) { if (this.value.length == 0) { throw new Error("æ²¡ææ°æ®æ æ³è¿è¡æåº") } if (numberindex == undefined || numberindex == null || numberindex == 0) { throw new error('å ¥åä¸åæ³'); } try { for (let i = 0; i < this.value.length; i++) { if (numberindex === this.value[i]) { return this.value[i - 1]; } } } catch (error) { console.log(error) } return -1; }; } let lArray = new LArray(); lArray.push(1, 2, 3, 4, 5); console.log(`before: `, lArray); // let ValueArr = lArray.valueof(); // console.log(`after: `, lArray); // console.log(`after: ValueArr = `, ValueArr); // let stringResult = lArray.toString(); // console.log(`after: `, lArray); // console.log(`after: stringResult = `, stringResult); // let popArray = lArray.pop(); // console.log(`after: `, lArray); // console.log(`after: popArray = `, popArray); // let shiftArray = lArray.shift(); // console.log(`after: `, lArray); // console.log(`after: shiftArray = `, shiftArray); // let UNshift = lArray.unshift('a', 'b') // console.log(`after: `, lArray); // console.log(`after: UNshift = `, UNshift); let joinStr = lArray.join('|'); console.log(`after: `, lArray); console.log(`after: joinStr = `, joinStr); // let ConcatArr = lArray.concat('[5,6],[8,9]'); // console.log(`after: `, lArray); // console.log(`after: ConcatArr = `, ConcatArr); // let reverseArr = lArray.reverse(); // console.log(`after: `, lArray); // console.log(`after: reverseArr = `, reverseArr); // let sliceArray = lArray.slice(1, 2); // console.log('after:', lArray); // console.log("after : sliceArray = ", sliceArray) // lArray.push(2, 1, 4, 3, 6, 5, 7, 9, 8); // console.log(`before: `, lArray); // let sortArr = lArray.sort(); // console.log('after:', lArray); // console.log('after: sortArr = ', sortArr); // let weicallback = function (x) { // return x + 1; // } // let mapArray = lArray.map(weicallback); // console.log(`after: `, lArray); // console.log(`after: mapArray = `, mapArray); //forEachå符串 // let out4 = '893ojejfkljio'; // out4.charAt(1); // let wlog4 = function (idx) { // return this.charAt(idx); // } // lArray.forEach2(wlog4, out4); // console.log('after:', lArray); // //forEachæ°ç» // let out = [];// new Array