常见数组方法及细节

 

/**
 * 查找元素在数组中出现的所有位置
 * @param {要查找的数组} array 
 * @param {要查找的元素} ele 
 * @param {回调函数} callback 
 */
function findAllIndex(array, ele, callback) {
    let indices = [];
    if (array && Array.isArray(array) && array.length) {
        let idx = array.indexOf(ele);
        while (idx != -1) {
            indices.push(idx);
            idx = array.indexOf(ele, idx + 1);
        }
        if ((typeof callback === "function") && callback) {
            callback(array, indices);
        }
        return indices;
    }
    return false;
}

 

// 查询元素在数组出现的次数
var Obj = Arrar.reduce(function (obj, name) {
  obj[name] = obj[name] ? ++obj[name] : 1;
  return obj;
}, {});

 

/**
 * 
 * @desc 判断两个数组是否相等
 * @param {Array} arr1 
 * @param {Array} arr2 
 * @return {Boolean}
 */
function arrayEqual(arr1, arr2) {
    if (arr1 === arr2) return true;
    if (arr1.length != arr2.length) return false;
    for (var i = 0; i < arr1.length; ++i) {
        if (arr1[i] !== arr2[i]) return false;
    }
    return true;
}

 

//快速数组求和
let array=[12,312,3,67,3,423,878,21];
eval(array.join("+"));

 

//数组求最大最小
let array = [1,2,3,4,5,6,7,8,9]
let maxNumber = Math.max.apply(Math,array)
let minNumber = Math.min.apply(Math,array)
Math 可以使用null

 

//数组去重
[...new Set([1,2,34,5,1,1,"1"])]

 

//如何判断一个数组

Array.isArray ||  instanceof Array || Object.prototype.toString.call || arr.constructor === Array

 

细节冷知识
slice() 方法返回一个新的数组对象,这一对象是一个由 begin和 end(不包括end)决定的原数组的浅拷贝。原始数组不会被改变
arr.slice();
// [0, end]

arr.slice(begin);
// [begin, end]

arr.slice(begin, end);
// [begin, end)

concat() 方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组
语法:var new_array = old_array.concat(value1[, value2[, ...[, valueN]]])
参数是对象引用的话,那么也只是将对象的引用复制的新是数组,所以只能浅拷贝

indexOf()方法返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1
语法:arr.indexOf(searchElement)
      arr.indexOf(searchElement[, fromIndex = 0])
注意:索引值是一个负值,则将其作为数组末尾的一个抵消,即-1表示从最后一个元素开始查找,如果抵消后的索引值仍小于0,则整个数组都将会被查询。其默认值为0
 

 

posted @ 2019-08-23 17:00  初心不负  阅读(348)  评论(0编辑  收藏  举报