数组方法重构

/* pop重构 */
        function pop(arr) {
            var elem = arr[arr.length - 1];
            if (arr.length > 0);
            arr.length--;
            return elem;
        }/* push重构 */
        function push(arr) {
            for (var i = 1; i < arguments.length; i++) {
                arr[arr.length] = arguments[i];
            }
            return arr.length;
        }
        var arr = [1, "ss", 2];
        var len = push(arr, 4, "svv");
        console.log(arr, len)/* shift重构 */
        function shift(arr) {
            var first = arr[0];
            var len = arr.length;
            for (var i = 0; i < arr.length - 1; i++) {
                arr[i] = arr[i + 1];
            }
            if (arr.length > 0) arr.length = len - 1;
            return first;
        }
        var arr = [5, 8, 7];
        arr1 = shift(arr);
        console.log(arr1, arr)/* unshift重构 */
        /* 方法1 */
        function unshift(arr) {
            var len = arguments.length - 1;
            for (var i = arr.length - 1; i >= 0; i--) {
                arr[i + len] = arr[i];
                arr[i] = null;
            }
            for (var j = 0; j < len; j++) {
                arr[j] = arguments[j + 1];
            }
            return arr.length;
        }

        /* 方法2 */
        function unshift2(arr) {
            var arr1 = [];
            for (var i = 0; i < arr.length; i++) {
                arr1[i] = arr[i];
            }
            arr.length = 0;
            for (var j = 0; j < arguments.length - 1; j++) {
                arr[j] = arguments[j + 1];
            }
            var len = arr.length;
            for (var k = 0; k < arr1.length; k++) {
                arr[len + k] = arr1[k];
            }
            return arr.length;
        }/* join重构 */
        function join(arr, elem) {
            if (elem === null) elem = String(elem);
            if (elem === undefined) elem = ","
            elem = String(elem);
            var str = "";
            for (var index in arr) {
                if (index == arr.length - 1) {
                    str += arr[index];
                } else {
                    str += arr[index] + elem;
                }
            }
            return str;
        }
        var arr = [8, "aa", {
            n: 1
        }];
六、/*concat 重构 */
function concat(arr) {
            var arr1 = [];
            for (var i = 0; i < arr.length; i++) {
                arr1[i] = arr[i];
            }
            if (arguments.length === 1) return arr1;
            for (var j = 1; j < arguments.length; j++) {
                if (arguments[j].constructor === Array && arguments[j] !== null) {
                    for (var k = 0; k < arguments[j].length; k++) {
                        arr1[arr1.length] = arguments[j][k];
                    }
                } else {
                    arr1[arr1.length] = arguments[j];
                }
            }
            return arr1;
        }/* splice重构 */
        function splice(arr, start, len) {
            var arr1 = [],
                index;
            len = len ? len : arr.length - start;
            if (arguments.length < 4) {
                if (start === undefined) return arr1;
                if (start === 0) {
                    for (var i = 0; i < arr.length; i++) {
                        arr1[arr1.length] = arr[i];
                    }
                    return arr1;
                }
                if (start < 0) {

                    for (index = arr.length + start; index < arr.length + start + len; index++) {
                        arr1[arr1.length] = arr[index];
                    }
                    for (index = arr.length + start; index < arr.length - len; index++) {
                        arr[index] = arr[index + len];
                    }
                    arr.length -= len;
                    return arr1;
                }
                if (start > 0) {
                    for (index = start; index < start + len; index++) {
                        arr1[arr1.length] = arr[index];
                    }
                    for (index = start; index < arr.length - len; index++) {

                        arr[index] = arr[index + len];

                    }
                    arr.length -= len;
                    return arr1;
                }
            }
            if (arguments.length > 3) {
                var arr2 = [];
                start = start > 0 ? start : arr.length + start;
                if (arguments[3] === 0) {
                    for (var i = 0; i < start; i++) {
                        arr2[arr2.length] = arr[i]
                    }
                    for (var j = 3; j < arguments.length; j++) {
                        arr2[arr2.length] = arguments[j];
                    }
                    for (var k = start; k < arr.length; k++) {
                        arr2[arr2.length] = arr[k];
                    }
                    arr.length = 0;
                    for (var l = 0; l < arr2.length; l++) {
                        arr[l] = arr2[l];
                    }
                    return arr1;
                } else {

                    for (index = start; index < start + len; index++) {
                        arr1[arr1.length] = arr[index];
                    }
                    for (index = start; index < arr.length - len; index++) {

                        arr[index] = arr[index + len];

                    }
                    arr.length -= len;
                    arr2 = [];
                    for (var i = 0; i < start; i++) {
                        arr2[arr2.length] = arr[i]
                    }
                    for (var j = 3; j < arguments.length; j++) {
                        arr2[arr2.length] = arguments[j];
                    }
                    for (var k = start; k < arr.length; k++) {
                        arr2[arr2.length] = arr[k];
                    }
                    arr.length = 0;
                    for (var l = 0; l < arr2.length; l++) {
                        arr[l] = arr2[l];
                    }
                    return arr1;
                }
            }
        }/* slice重构 */
        function slice(arr, start, end) {
            var arr1 = [];
            if (start === undefined) start = 0;
            if (end === undefined) end = arr.length;
            start = Number(start);
            end = Number(end);
            if (!isNaN(end) && isNaN(start)) start = 0;
            if (isNaN(start)) return [];
            if (start < 0) start = arr.length + start;
            if (end < 0) end = arr.length + end;
            var arr1 = [];
            for (var i = start; i < end; i++) {
                arr1[i - start] = arr[i];
            }
            return arr1;
        }/* forEach重构 */
        function forEach(arr, fn) {
            for (var i = 0; i < arr.length; i++) {
                if (i in arr) fn(arr[i], i, arr);
            }
        }
        forEach(arr, function(item, index, arr) {
            console.log(item, index);
        })/* map重构 */
        function map(arr, fn) {
            var arr1 = [0];
            for (var i = 0; i < arr.length; i++) {
                if (i in arr) arr1[i] = fn(arr[i], i, arr);
            }
            return arr1;
        }
 十一/* indexOf重构 */
        function indexOf(arr, elem, index) {
            if (index === undefined) index = 0;
            for (i = index; i < arr.length; i++) {
                if (arr[i] === elem) return i;
            }
            return -1
        }
 十二 /* filter重构 */
        function filter(arr, fn) {
            var arr1 = [];
            if (arr.length === 0) return arr1;
            for (var i = 0; i < arr.length; i++) {
                if (fn(arr[i], i, arr)) {
                    arr1.push(arr[i]);
                }
            }
            return arr1;
        }
  十三/* reduce重构 */
        function reduce(arr, fn, value) {
            var index = 0;
            if (value === undefined) {
                value = arr[0];
                index = 1;
            }
            for (; index < arr.length; index++) {
                value = fn(value, arr[index], index, arr);
            }
            return value;
        }

猜你喜欢

转载自blog.csdn.net/weixin_45261642/article/details/107879278
今日推荐