数组方法练习

例1:创建一个长度为100的数组,每个元素值都是数字5

var arr = new Array(100).fill(5);

例2:将数组arr=[30,0,6,1,12,10]中大于10的元素选出来,放入一个新的数组

var arr = [30,0,6,1,12,10];
var newArr = arr.filter(function(i,index){
    return i > 10;
})
console.log(newArr); //[30,12]

例3:数组从小到大排序

var arr = [7,3,5,2,6,4]
var newArr = arr.sort((a,b) => {
    return a - b;
})
console.log(newArr); // [2, 3, 4, 5, 6, 7]

例4:数组去重

var a = [1,2,2,4,5,8,3,4,2];

// 方法一:双层循环,外层循环元素,内层循环时比较值,如果有相同的值则跳过,不相同则push进数组
function unique(arr) {
    var newArr = [];
    for (var i = 0; i < arr.length; i++) {
        for (var j = i + 1; j < arr.length; j++) {
            if (arr[i] === arr[j]) {
                j = ++i;
            }
        }
        newArr.push(arr[i]);
    }
    return newArr;
}
console.log(unique(a)); // [1, 5, 8, 3, 4, 2]

// 方法二:利用splice直接在原数组进行操作
function unique(arr) {
    for (var i = 0; i < arr.length; i++) {
        for (var j = i + 1; j < arr.length; j++) {
            // 循环比较当前值和后面的值是否相等,如果相等就删除索引是j的这个,然后j--
            if (arr[i] == arr[j]) {
                arr.splice(j, 1);
                j--;
            }
        }
    }
    return arr;
}
console.log(unique(a)); // [1, 2, 4, 5, 8, 3]

// 方法三:利用 indexOf()方法
function unique(arr) {
    var newArr = [];
    for (var i = 0; i < arr.length; i++) {
    	// 遍历旧数组,拿旧数组元素去查询新数组,如果该元素在数组中没出现过,就添加,否则不添加
        if (newArr.indexOf(arr[i]) === -1) {
            newArr.push(arr[i]);
        }
    }
    return newArr;
}
console.log(unique(a)); // [1, 2, 4, 5, 8, 3]

// 方法四:利用 includes()方法
function unique(arr) {
    var newArr = [];
    for (var i = 0; i < arr.length; i++) {
        // 判断一个数组是否包含一个指定的值,如果包含则返回 true,否则返回false
        if (!newArr.includes(arr[i])) {
            newArr.push(arr[i]);
        }
    }
    return newArr;
}
console.log(unique(a)); // [1, 2, 4, 5, 8, 3]

// 方法五:利用 filter()方法
function unique(arr) {
    let newArr = arr.filter((item, index) => {
        // 将数组进行过滤,筛选条件是数组下标与检索下标一致
        return arr.indexOf(item) === index
    })
    return newArr
}
console.log(unique(a)); // [1, 2, 4, 5, 8, 3]

// 方法六:利用对象的属性不能相同的特点进行去重
function unique(arr) {
    var newArr = [];
    var obj = {}
    for (i = 0; i < arr.length; i++) {
        // 如果能查找到,证明数组元素重复了
        if (!obj[arr[i]]) {
            obj[arr[i]] = 1;
            newArr.push(arr[i]);
        }
    }
    return newArr;
}
console.log(unique(a)); // [1, 2, 4, 5, 8, 3]

// 方法七:利用Array.from将Set结构转换成数组
var newArr = Array.from(new Set(a));
console.log(newArr); //[1, 2, 4, 5, 8, 3]

// 方法八:扩展运算符(...)内部使用for...of循环
var newArr = [...new Set(a)];
console.log(newArr); //[1, 2, 4, 5, 8, 3]

// 方法九:利用sort()方法
function unique(arr) {
    arr.sort(function (a, b) { // 对数组进行排序才能方便比较
        return a - b;
    })
    for (var i = 0; i < arr.length; i++) {
        // 循环比较前后两个是否相等,如果相等就删除索引是i的这个,然后i--
        if (arr[i] === arr[i + 1]) {
            arr.splice(i, 1);
            i--;
        }
    }
    return arr;
}
console.log(unique(a)); // [1, 2, 3, 4, 5, 8]

例5:求数组中最大值

var arr = [1, 88, 24, 35, 9];
// 方法一:Math.max.apply()
var max1 = Math.max.apply(null, arr);
console.log(max1); //88

// 方法二:Math.max()
var max2 = Math.max(...arr);
console.log(max2); //88

// 方法三:for循环
let max3 = arr[0];
for (let i = 0; i < arr.length - 1; i++) {
    max3 = max3 < arr[i + 1] ? arr[i + 1] : max3
}
console.log(max3); //88

// 方法四:sort()
arr.sort((a, b) => {
    return b - a
})
console.log(arr[0]); //88

// 方法五:reduce()
var max5 = arr.reduce((a, b) => {
    return a > b ? a : b
})
console.log(max5); //88

例6:统计出现最多的字符和次数

var str = 'abbooxozzopop';
var o = {};
for (var i = 0; i < str.length; i++) {
    var chars = str.charAt(i);
    //对象['属性名'],可以来判断一个对象是否有该属性
    if (o[chars]) {   
        o[chars]++;
    } else {
        o[chars] = 1;
    }
}
console.log(o); //{a: 1, b: 2, o: 5, x: 1, z: 2}

//遍历对象
var max = 0;
var ch = '';
for (var k in o) {
    // k得到的是属性名
    // o[k]得到的是属性值
    if (o[k] > max) {
        max = o[k];
        ch = k;
    }
}
console.log(max); //5
console.log('最多的字符是' + ch); //最多的字符是o
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Komorebi゛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值