前端算法(一)

本文探讨前端开发中JavaScript数组的常见操作方法,包括遍历、查找、排序等核心算法,深入理解原型模式在数组操作中的应用。

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

数组常见方法:

concat() 连接两个或多个数组 并返回结果
let arr1 = [1,2];
let arr2 = [1,2];
arr1.concat(arr2);

every() 对数组的每一项运行给定函数 如果该函数对于每一项都返回true,则返回true 否则 false

let names = ['abc', 'cd','ac'];  // 可以通过every() 判断数组每一项是否包含某个字符 

let flag  = names.every(function (t) {
	return t.indexOf('a') != -1; 
})

filter() 对数组的每一项运行给定函数 返回该函数会返回true的项所组成的数组
var a = [1,2,3,4]
a.filter((item) => {return item > 2})  // [3,4]

forEach() 对数组的每一项运行给定函数,无返回值

names.forEach(function (t) {
	console.log(t); // 遍历数组
})

join()  连接所有数组元素 使之成为字符串
var a = [1,2,3]
a.join('')  // '123'
a.join('+')  // '1+2+3'

map() 遍历数组元素 并对其变换 返回变换后的数组

indexOf() 返回第一个与给定参数相等的元素的索引

lastIndexOf()  返回与给定参数相等的元素的最大索引

reverse() 反转数组元素 

slice()  传入索引值 将数组里对应索引范围的元素作为新数组返回

some() 对数组中的每一项运行给定函数 如果任一项返回true 结果为true 迭代结束

sort() 按字母顺序排序

toString() 将数组作为字符串返回

valueOf() 将数组作为字符串返回
var numbers = [1,2,3];
// 求和 pre的值已知发生变化  函数式编程
var total = numbers.reduce(function (pre, cur) {
    return pre + cur;
})

排序算法
冒泡排序:每次循环将最大的冒泡到一端
var a = [14,1,6,2,77,3,9,34]
function bable(arr) {
	var temp
	for(var i = 0; i < arr.length; i++) {
		for(var j = 0; j < arr.length - i; j++) {
			if(arr[j] > arr[j+1]) {
				[arr[j], arr[j+1]] = [arr[j+1], arr[j]]
			}
		}
	}
	return arr
}
bable(a)

插入排序
将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。
从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)
function insertionSort(arr) {
    var len = arr.length;
    var preIndex, current; 
    for (var i = 1; i < len; i++) {
        preIndex = i - 1;  // 有序部分的尾
        current = arr[i]; // 无序的首
        while(preIndex >= 0 && arr[preIndex] > current) {
        // 有序的尾 > 无序的首时
        // 有序部分加1 且其值为原有序部分的尾
            arr[preIndex+1] = arr[preIndex];
         // 退回一个位置 再次比较 【寻找有序部分的合适位置】
            preIndex--;
        }
        // 找到了合适位置 插入该无序元素
        arr[preIndex+1] = current;
    }
    return arr;
}

快速排序:
function quickSort(arr) {
	if(arr.length < 2) return arr
	// 取基点
	var middle = Math.floor(arr.length / 2)
	var middleData = arr.splice(middle, 1)[0]
	var left = []
	var right = []
	for(var i = 0; i < arr.length; i++) {
		if(arr[i] < middleData) left.push(arr[i])
		else right.push(arr[i])
	}
	return quickSort(left).concat([middleData], quickSort(right))
}

判断回文字符串
function isHuimen(s) {
	return s === s.split('').reverse().join('')
}

数组去重
var s = new Set(arr)
var a = [...s]
广义去重 (自己取的名字,哈哈)
var arr = [1,2,1,21,2,2,1,4,5, 'ss', 'ss', 'ee']
var o = {}
arr.forEach((item, index) => {o[item]=item})
arr.length = 0
for(var i in o) {arr.push(o[i])}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值