模拟内置对象api函数封装

本文介绍了JavaScript中的一些基本数组操作方法,包括数组去重、排序、查找最大值以及对象数组的排序。同时,还展示了如何模拟实现数组的`reverse`、`pop`、`toString`、`join`和`slice`方法,对于理解和提升JavaScript数组操作技能具有实用价值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

* unique 数组去重
 * @param {Array} array  
 */
function unique(array) {
    var res = [];
    var arrayLen = array.length;
    // 验证res 中是否存在 array 数组中元素
    for (var i = 0; i < arrayLen; i++) {
        0           // j===resLen 循环执行完毕 都没有执行 break
        //----> 当前的arr[i]  不重复
        for (var j = 0; j < resLen; j++) {
            // 如果res 中有arr[i]
            if (array[i] === res[j]) {
                break;
            }
        }
        if (j === resLen) {
            res.push(array[i]);
        }
    }
    return res;
}
/**
 * sort 数组排序
 * @param {Array} array 
 * @param {Boolean} flag 
 */

function sort(array, flag) {
    if (flag) {
        // 升序
        for (var i = 0; i < array.length; i++) {
            for (var j = i + 1; j < array.length; j++) {
                if (array[i] > array[j]) {
                    var tmp = array[i];
                    array[i] = array[j];
                    array[j] = tmp;
                }
            }
        }
    } else {
        for (var i = 0; i < array.length; i++) {
            for (var j = i + 1; j < array.length; j++) {
                if (array[i] < array[j]) {
                    var tmp = array[i];
                    array[i] = array[j];
                    array[j] = tmp;
                }
            }
        }
    }
    return array;
}
/**
 * 求最大值
 * @param {Array} arr 
 */

function max(arr) {
    var max = arr[0];
    for (var i = 0; i < arr.length; i++) {
        max = Math.max(max, arr[i]);
    }
    return max
}
/**
 * [{}] 数据排序
 * @param {Array} arr 
 * @param {String} key 
 * @param {Boolean} flag 
 */

function sort_object(arr, key, flag) {
    // key 告诉函数。用什么比较
    if (flag) {
        for (var i = 0; i < arr.length; i++) {
            for (var j = i + 1; j < arr.length; j++) {
                var age_j = Number(arr[j][key]);
                var age_i = arr[i][key];
                if (age_i > age_j) {
                    var tmp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = tmp;
                }
            }
        }
    } else {
        for (var i = 0; i < arr.length; i++) {
            for (var j = i + 1; j < arr.length; j++) {
                var age_j = Number(arr[j][key]);
                var age_i = arr[i][[key]];
                if (age_i < age_j) {
                    var tmp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = tmp;
                }
            }
        }
    }

    return arr;
}

/** 
 *  验证js 数据类型
 * @param {*} data
 */
function vertyfi(data){
    if( typeof data !=="object") return typeof data;
    if(data === null) return 'null';
    if(Array.isArray(data)) return 'array';
    return 'object'
}


/**
 * 数组扁平化
 * @param {Array} arr
 */
function flatten (arr){
    var res = []
    for(var i=0,len=arr.length;i<len;i++){
        if(Array.isArray(arr[i])){
            res.res.concat(flatten(arr[i]))
        }else{
            res.push(arr[i])
        }
    }
    return res
}
模拟实现 reverse
        模拟实现 reverse
           function arr_reverse(array){
               var res =[]
            for(i=array.length-1;i>=0;i--){
                res[res.length]=array[i]
            }
            return res
           } 
           var res =arr_reverse([1,2,3,4,5])
           console.log(res);

        模拟实现pop
           function arr_pop(array){
               var res = []
               for(i=0;i<array.length-1;i++){
                   res[res.length]=array[i]
               }
               return res
           }
           console.log(arr_pop([1,2,3,4,5])); 


        模拟toString()
        function arr_toString(item){
            var res = '';
            for(i=0;i<item.length;i++){
                res += item[i]+','
            }
            return res
        }
        console.log(arr_toString(['a','b','c',4,5,6]));

        模拟join
        function arr_join(item,key){
            var res = '';
            for(i=0;i<item.length;i++){
                if(i<item.length-1){
                    res += item[i]+key
                }else{
                    res += item[i]
                }            
            }
            return res
        }
        console.log(arr_join(['a','b','c',4,5,6],'/'));
        
		模拟slice()
        返回截取的片段数组
        function arr_slice(array,start,end){
            var res = []
            for(i=0;i<array.length;i++){            
                if(i>=start && i<end || end === undefined){
                    res[res.length] = array[i]
                }
            }
            return res
        }
        console.log(arr_slice([1,2,3,4,5],0));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值