0

0

js中对数组进行操作的方法总结(代码)

不言

不言

发布时间:2018-08-23 15:16:21

|

1872人浏览过

|

来源于php中文网

原创

本篇文章给大家带来的内容是关于js中对数组进行操作的方法总结(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

1.找出元素 item 在给定数组 arr 中的位置

function indexOf(arr, item) {
  if (Array.prototype.indexOf){ //判断原型中是否支持该方法
      return arr.indexOf(item);
  } else {      
  for (var i = 0; i < arr.length; i++){          
  if (arr[i] === item){              
  return i;
          }
      }
  }     
  return -1;
}

2.计算给定数组 arr 中所有元素的总和

//forEach遍历:
function sum(arr) {
    var s = 0;
    arr.forEach(function(val, idx, arr) {
        s += val;
    }, 0);    
    return s;
};
//eval:
function sum(arr) {
    return eval(arr.join("+"));
};

3.移除数组 arr 中的所有值与 item 相等的元素。不要直接修改数组 arr,结果返回新的数组

//splice()
function remove(arr,item){
    var newarr = arr.slice(0);    
    for(var i=0;i<newarr.length;i++){        
    if(newarr[i] == item){
            newarr.splice(i,1);
            i--;
        }
    }    
    return newarr;
}//push()
function remove(arr,item){
    var newarr = [];    
    for(var i=0;i<arr.length;i++){        
    if(arr[i] != item){
            newarr.push(arr[i]);
        }
    }    
    return newarr;
}//Array.prototype.filter()
function remove(arr,item){
    return arr.filter(function(ele){
         return ele != item;
    })
}

4.移除数组 arr 中的所有值与 item 相等的元素,直接在给定的 arr 数组上进行操作,并将结果返回

//splice
function removeWithoutCopy(arr, item) {
    for(var i=0; i<arr.length; i++)
    {        
    if(item == arr[i])
        {
            arr.splice(i,1);
            i--;
        }
    }    
    return arr;
}//while
function removeWithoutCopy(arr, item) {
    for(var i in arr){        
    while(arr[i]==item){
            arr.splice(i,1);
        }
    }    
    return arr;
}

5.在数组 arr 末尾添加元素 item。不要直接修改数组 arr,结果返回新的数组

//普通的迭代拷贝
var append = function(arr, item) {
    var length = arr.length,
        newArr = [];    
        for (var i = 0; i < length; i++) {
        newArr.push(arr[i]);
    }

    newArr.push(item);    
    return newArr;
};//使用slice浅拷贝+push组合
function append(arr, item) {
    var newArr=arr.slice(0);
    newArr.push(item);    
    return newArr;
}

6.删除数组 arr 最后一个元素。不要直接修改数组 arr,结果返回新的数组

//利用slice
function truncate(arr) {
    return arr.slice(0,-1);
}
//利用filter
function truncate(arr) {
    return arr.filter(function(v,i,ar) {
        return i!==ar.length-1;
    });
}
//利用push.apply+pop
function truncate(arr) {
    var newArr=[];
    [].push.apply(newArr, arr);
    newArr.pop();    return newArr;
}
//利用join+split+pop    注意!!!:数据类型会变成字符型
function truncate(arr) {
    var newArr = arr.join().split(',');
    newArr.pop();    
    return newArr;
}

7.在数组 arr 开头添加元素 item。不要直接修改数组 arr,结果返回新的数组

//利用concat
function prepend(arr, item) {
    return [item].concat(arr);
}
//使用push.apply
function prepend(arr, item) {
    var newArr=[item];
    [].push.apply(newArr, arr);    
    return newArr;
}
//利用slice+unshift/splice
function prepend(arr, item) {
    var newArr=arr.slice(0);
    newArr.unshift(item);//newArr.splice(0,0,item);
    return newArr;
}

8.删除数组 arr 第一个元素。不要直接修改数组 arr,结果返回新的数组

//利用slice
function curtail(arr) {
    return arr.slice(1);
}
//利用filter
function curtail(arr) {
    return arr.filter(function(v,i) {
        return i!==0;
    });
}
//利用push.apply+shift
function curtail(arr) {
    var newArr=[];
    [].push.apply(newArr, arr);
    newArr.shift();    
    return newArr;
}

9.合并数组 arr1 和数组 arr2。不要直接修改数组 arr,结果返回新的数组

启科网络PHP商城系统
启科网络PHP商城系统

启科网络商城系统由启科网络技术开发团队完全自主开发,使用国内最流行高效的PHP程序语言,并用小巧的MySql作为数据库服务器,并且使用Smarty引擎来分离网站程序与前端设计代码,让建立的网站可以自由制作个性化的页面。 系统使用标签作为数据调用格式,网站前台开发人员只要简单学习系统标签功能和使用方法,将标签设置在制作的HTML模板中进行对网站数据、内容、信息等的调用,即可建设出美观、个性的网站。

下载
//利用concat
function concat(arr1, arr2) {
    return arr1.concat(arr2);
}
//利用slice+push.apply
function concat(arr1, arr2) {
    var newArr=arr1.slice(0);
    [].push.apply(newArr, arr2);    
    return newArr;
}
//利用slice+push
function concat(arr1, arr2) {
    var newArr=arr1.slice(0);    
    for(var i=0;i<arr2.length;i++){
        newArr.push(arr2[i]);
    }    
    return newArr;
}

10.在数组 arr 的 index 处添加元素 item。不要直接修改数组 arr,结果返回新的数组

//利用slice+splicefunction insert(arr, item, index) {
    var newArr=arr.slice(0);
    newArr.splice(index,0,item);    return newArr;
}//利用push.apply+splicefunction insert(arr, item, index) {
    var newArr=[];
    [].push.apply(newArr, arr);
    newArr.splice(index,0,item);    return newArr;
}

11.统计数组 arr 中值等于 item 的元素出现的次数

//filter()-->利用指定的函数确定是否在返回的数组中包含某一项
        function count(arr, item) {
            var count = arr.filter(function(a) {
                return a === item;   //返回true的项组成的数组
            });            
            return count.length;
        }  
        //map()-->对数组中的每一项进行给定函数,
  //返回每次函数条用的结果组成的数组;
        function count(arr, item) {
            var count = 0;
            arr.map(function(a) {
                if(a === item) {
                    count++;
                }
            });            
            return count;
        }//forEach()-->对数组中的每一项运行传入的函数
        function count(arr, item) {
            var count = 0;
            arr.forEach(function(a) {
                a === item ? count++ : 0;
            });            
            return count;
        }

12.找出数组 arr 中重复出现过的元素

//两次遍历
function duplicates(arr) {
     //声明两个数组,a数组用来存放结果,b数组用来存放arr中每个元素的个数
     var a = [],b = [];     
     //遍历arr,如果以arr中元素为下标的的b元素已存在,则该b元素加1,否则设置为1
     for(var i = 0; i < arr.length; i++){         
     if(!b[arr[i]]){
             b[arr[i]] = 1;             
             continue;
         }
         b[arr[i]]++;
     }     
     //遍历b数组,将其中元素值大于1的元素下标存入a数组中
     for(var i = 0; i < b.length; i++){         
     if(b[i] > 1){
             a.push(i);
         }
     }     
     return a;
 }
 //先排序,如果后一个与前一个相等且未保存,则保存。
 function duplicates(arr) {
    var a=arr.sort(),b=[];    
    for(var i in a){        
    if(a[i]==a[i-1] && b.indexOf(a[i])==-1) b.push(a[i]); 
    }    
    return b;
}
//先排序然后再判断function duplicates(arr) {
    var new_arr = arr.sort();//先把arr排序
    var res = [] ;//目标容器
    for( var i = 0 ; i < new_arr.length ; i++){        
    if(new_arr[i] == new_arr[i+1] &&
        new_arr[i] !=new_arr[i-1]){//判断是否重复,是否已经放入容器
            res.push(new_arr[i]);
        }
    }
    return res;

13.为数组 arr 中的每个元素求二次方。不要直接修改数组 arr,结果返回新的数组

function square(arr) {
   //声明一个新的数组存放结果
     var a = [];
     arr.forEach(function(e){
         //将arr中的每一个元素求平方后,加入到a数组中
         a.push(e*e);
     });     
     return a;
 }
 // 使用map
  function square(arr) {
      return arr.map(function(e) {
          return e * e;
      })
  }  
  // ES6箭头函数版
  const square = arr => arr.map(e => e * e);

14.在数组 arr 中,查找值与 item 相等的元素出现的所有位置

//forEach
function findAllOccurrences(arr, target) {
    var a=[];
    arr.forEach(function(e,index){
        if(e==target)
            a.push(index);
    })    
    return a;
}
function findAllOccurrences(arr, target) {
var temp = [];
    arr.forEach(function(val,index){
        val !== target ||  temp.push(index);
    });    
    return temp;
}//filter
function findAllOccurrences(arr, target) {
    var result=[];
    arr.filter(function(item,index){
        return item===target&&result.push(index);
    });    
    return result;
}

相关推荐:

js数组操作方法总结(必看篇)

说明Js数组操作基本方法

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

28

2026.02.28

Golang 工程化架构设计:可维护与可演进系统构建
Golang 工程化架构设计:可维护与可演进系统构建

Go语言工程化架构设计专注于构建高可维护性、可演进的企业级系统。本专题深入探讨Go项目的目录结构设计、模块划分、依赖管理等核心架构原则,涵盖微服务架构、领域驱动设计(DDD)在Go中的实践应用。通过实战案例解析接口抽象、错误处理、配置管理、日志监控等关键工程化技术,帮助开发者掌握构建稳定、可扩展Go应用的最佳实践方法。

23

2026.02.28

Golang 性能分析与运行时机制:构建高性能程序
Golang 性能分析与运行时机制:构建高性能程序

Go语言以其高效的并发模型和优异的性能表现广泛应用于高并发、高性能场景。其运行时机制包括 Goroutine 调度、内存管理、垃圾回收等方面,深入理解这些机制有助于编写更高效稳定的程序。本专题将系统讲解 Golang 的性能分析工具使用、常见性能瓶颈定位及优化策略,并结合实际案例剖析 Go 程序的运行时行为,帮助开发者掌握构建高性能应用的关键技能。

27

2026.02.28

Golang 并发编程模型与工程实践:从语言特性到系统性能
Golang 并发编程模型与工程实践:从语言特性到系统性能

本专题系统讲解 Golang 并发编程模型,从语言级特性出发,深入理解 goroutine、channel 与调度机制。结合工程实践,分析并发设计模式、性能瓶颈与资源控制策略,帮助将并发能力有效转化为稳定、可扩展的系统性能优势。

16

2026.02.27

Golang 高级特性与最佳实践:提升代码艺术
Golang 高级特性与最佳实践:提升代码艺术

本专题深入剖析 Golang 的高级特性与工程级最佳实践,涵盖并发模型、内存管理、接口设计与错误处理策略。通过真实场景与代码对比,引导从“可运行”走向“高质量”,帮助构建高性能、可扩展、易维护的优雅 Go 代码体系。

18

2026.02.27

Golang 测试与调试专题:确保代码可靠性
Golang 测试与调试专题:确保代码可靠性

本专题聚焦 Golang 的测试与调试体系,系统讲解单元测试、表驱动测试、基准测试与覆盖率分析方法,并深入剖析调试工具与常见问题定位思路。通过实践示例,引导建立可验证、可回归的工程习惯,从而持续提升代码可靠性与可维护性。

2

2026.02.27

漫蛙app官网链接入口
漫蛙app官网链接入口

漫蛙App官网提供多条稳定入口,包括 https://manwa.me、https

164

2026.02.27

deepseek在线提问
deepseek在线提问

本合集汇总了DeepSeek在线提问技巧与免登录使用入口,助你快速上手AI对话、写作、分析等功能。阅读专题下面的文章了解更多详细内容。

8

2026.02.27

AO3官网直接进入
AO3官网直接进入

AO3官网最新入口合集,汇总2026年可用官方及镜像链接,助你快速稳定访问Archive of Our Own平台。阅读专题下面的文章了解更多详细内容。

309

2026.02.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 9.9万人学习

Django 教程
Django 教程

共28课时 | 4.7万人学习

Excel 教程
Excel 教程

共162课时 | 19.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号