JS算法 数组-对象
数组排序:
(1).冒泡排序
冒泡排序的原理:
就是通过两层循环把数组中两两相邻的元素进行比较,是的大的元素放到后边,元素交换位置,从而一步步的交换元素的位置,使得最大的元素放到数组的末尾,这样内部的循环就进行了一轮,再根据外部的循环依次再把次大一点的元素放到数组的末尾,从而实现数组的逐步排序
var arr = [1,2,3,4,5,8,9,6,5]
for( var i = 0; i< arr.length-1;i++){
for( var j = 0; j< arr.length - i - 1;j++){
if(arr [ j ] > arr [ j+1 ]){
t = arr [ j ]
arr [ j ] = arr [ j+1 ]
arr [ j+1 ] = t
} } }
(2).内置对象方法
sort默认排序是按照字符来排序的,也就是ASCII码排序的,如果想要改变默认的排序方式,就要给他加一个自定义排序规则
arr.sort( ( a,b )=>{
return a-b
} )
(3).选择排序
选择排序原理:
就是选择出数组中最大或者是最小的数放到最前面,然后在一次循环,选择次一级最大或者最小的数,从而得到想要的排序数组。
for( var i = 0; i < arr.length-1 ; i++ ){
for( var j = i+1; j<arr.length;j++){
if( arr[i] > arr[ j ] ){
var t = arr[ i ]
arr[ i ] = arr[ j ]
arr[ j ] = t
}}}
数组去重
(1)indexOf / lastindexOf
var arr = [0,2,1,7,90,56,100,1,7,56,2,90,101,99];
var arr1 = [ ]
for( var i = 0; i < arr.length;i++){
if( arr1.indexOf(arr[ i ] == -1) ){
arr1.push( arr[ i ] )
}}
(2)设置标识符
for( var i = 0; i< arr.length; i++ ){
var flag = true;
for( var j = i+1;j < arr.length; j++){
if( arr[ i ] == arr[ j ]){
flag = false;
continue;
}}
if(flag){
arr1.push( arr [ i ] )
}}
(3)利用对象属性
var obj = {}
for( var i = 0; i < arr.length ; i++ ){
if( ! obj [ arr[ i ] ]){
arr1.push(arr [ i ] );
obj [ arr [ i ]] = true;
}}
(4)ES6 set方法
Set为ES6新增的一个对象,允许存储任何类型(原始值或引用值)的唯一值
console.log(new Set(arr))
(5) 使用双重for循环,再利用数组的splice方法去重(ES5常用)
for ( var i = 0; i < arr.length ; i++ ){
for( var j = i+1; j < arr.length ; j++ ){
if ( arr[ i ] === arr[ j ]){
arr.splice( j , 1);
j - -;
}}}
数组深拷贝
var arr = [ 1,2,5,3,4 ]
var arrNew = [ ]
(1)for循环
arr.forEach(item => {
arrNew.push(item)
})
(2)扩展运算符 rest
arrNew = [ ...arr ]
(3)concat //方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。
arrNew = arr.concat
(4)slice //
arrNew = arr.splice(0)
(5)JSON
arrNew = JSON.parse(JSON.stringify(arr))
对象深拷贝
var obj = { "a":1,"b":2,"c":3 }
var objNew = { }
(1)Object.assign
Object.assign(objNew,obj)
(2)rest //扩展运算符
objNew = { ... obj }
(3)for in
for( ker in obj ){
objNew[ key ] = obj [ key ]
}
(4)JSON
objNew = JSON.parse(JSON.stringify( obj ))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?