当前位置: 首页 > news >正文

数据结构与算法-数组

前言:

几乎所有的编程语言都原生支持数组类型。因为数组是最简单的内存数据结构。

创建一个数组:

let arr = new Array()

let arr = new Array(5) // 指定长度

let arr = new Array(1,2,3,4,5) // 将数组元素作为参数传给构造函数

let arr = [1,2,3,4,5] // 中括号创建数组

访问元素和迭代数组:

for (let i = 0; i < arr.length; i ++) {console.log(arr[i])}

斐波那契数列

已知斐波那契数列的前三项分别是0,1,1,从第三项开始,每一项都等于前两项之和。求斐波那契数列前20个数。

const arr = new Array(20);
arr[0] = 0;
arr[1] = 1;
arr[2] = 1;
for (let i = 3;i<arr.length;i++) {arr[i] = arr[i-1] + arr[i-2]
}

斐波那契数列的经典算法面试题可以看这篇推文->斐波那契数列的算法

添加数组元素

1、在末尾插入元素

在js中,数组是一个可以修改的对象。如果添加元素,它会动态的增长。在其他语言如C和java中,想添加元素需要创建一个全新的数组。不能直接往里面添加元素

arr[arr.length] = 10

arr.push(10) //一个
arr.push(10,11) //两个
2、在开头插入元素
arr.unshift(-1)//一个
arr.unshift(-1,-2)//两个

不用unshift怎么实现在开头插入一个元素

var arr = [3,4,5,6]
for (var i = arr.length;i>0;i--){arr[i] = arr[i-1]
}
arr[0] = 2
3、在数组末尾删除元素
arr.pop();

push和pop方法都是用数组模拟栈。

4、在数组开头删除元素
arr.shift();

不用shift怎么实现在开头删除一个元素

Array.prototype.move= function() {for(var i =0;i<this.length;i++){this[i] = this[i+1]}return this.removeUndefined()
}
Array.prototype.removeUndefined = function(){const newArr = [];for (var i = 0; i< this.length;i++) {if (this[i] !== undefined) {newArr.push(this[i])}}return newArr
}
// -----------------------------------------------
var arr = [3,5,6,7,8]
arr.move() // [5,6,7,8]
5、任意位置添加或删除元素
arr.splice(_index,_number,[element]);
// _index:删除或插入的下标
// _number个数
// [element]替换的元素

二维数组(矩阵)

js只支持一维数组,我们可以用数组套数组,实现二维数组(矩阵)或多维数组。

const dataModel = [[65,23,45],[21,11,77]
]

迭代二维数组的元素

for(let i = 0;i < dataModel.length;i++) {for (let j = 0;j < dataModel[i].length;j++) {console.log(dataModel[i][j])}
}

多维数组

// 三维数组
const arr = new Array();
arr[0] = [];
arr[0][0] = [1];
arr[0][0][0] =1;

创建一个3*3正方形魔方立体矩阵

const arr = [];
const r = 3; // 正方体边长
for (var x =0;x<r;x++) {arr[x] = []; //必须层层初始化数组for (var y=0;y<r;y++) {arr[x][y] = [];for (var z=0;z<r;z++) {arr[x][y][z] = x+y+z;}}
}
魔方中最小的值为0+0+0等于0,最大的值为2+2+2=6

循环遍历三维数组

for (var x = 0; x< arr.length; x++) {for (var y =0;y<arr[x].length;y++) {for (var z = 0;z<arr[x][y].length;z++) {console.log(arr[x][y][z])}}
}

四维数组使用极少,在此不表。

常用数组方法

方法名

对应版本

功能

原数组改变

concat①

-

合并数组,并返回合并之后的数据

x

forEach

ES5

遍历数组所有的项。接收回调参数为传参。回调函数接受三个参数,分别为value,index,self;无返回值

x

every

ES5

同forEach,回调函数对每个数组元素返回布尔值,全部为true,由every返回true

x

some

ES5

同forEach,回调函数对每个数组元素返回布尔值,若有一个为true则返回true

x

map

ES5

同forEach,回调函数对每个数组元素

x

filter

ES5

同forEach,回调函数返回布尔值,返回结果true的元素组成的新数组

x

reduce②

ES5

同forEach,迭代数组的所有项,并构建一个最终值,由reduce返回

x

join③

-

使用分隔符,将数组转为字符串并返回

x

indexOf

ES5

查询并返回数据的索引

x

lastIndexOf

ES5

反向查询并返回数据的索引

x

reverse

-

反转数组,返回结果

sort

-

按照字母顺序对数组排序,支持传入指定的排序方法函数作为参数

valueOf④

-

返回对象

x

toString⑤

-

将数组作为字符串返回

x

①
const arr = [1,2];
arr.concat([3,4,5]); //  [1, 2, 3, 4, 5]
arr; // [1,2]
②
// 作用1 求和
const arr = [1,2,3,4,5]
const sum = arr.reduce((result,item) => {console.log(result) // 计算结果console.log(item) // 当前元素return result+item
}, 0)
// 作用2 求数组项最大值
const arr = [1,2,3,4,5]
const sum = arr.reduce((result,item) => {return Math.max(result,item)
})
// 作用3 扁平一个二维数组var arr = [[1, 2, 8], [3, 4, 9], [5, 6, 10]];
var res = arr.reduce((prev, cur) => prev.concat(cur), []);
console.log(res)   // [1,2,8,3,4,9,5,6,10]
③
var a = [1,2,3]
a.join() // '1,2,3'
a.join('-') // '1-2-3'
④
var a = [1,2,3]
a.valueOf() // [1,2,3]
⑤
var a = [1,2,3]
a.toString() // '1,2,3'

迭代器函数

相关文章:

数据结构与算法-数组

前言&#xff1a;几乎所有的编程语言都原生支持数组类型。因为数组是最简单的内存数据结构。创建一个数组&#xff1a;let arr new Array()或let arr new Array(5) // 指定长度或let arr new Array(1,2,3,4,5) // 将数组元素作为参数传给构造函数或let arr [1,2,3,4,5] // …...

PMP证书在哪个行业比较有用?

PMP 各个行业都能用&#xff0c;PMP 的知识体系是通用的&#xff0c;管理层的考试也有借鉴PMP知识的地方。历年考生考的最多的是IT 行业&#xff0c;其他行业也都有分布。PMP认证从国外引进大陆这么多年了&#xff0c;其火热程度依然不减&#xff0c;我个人认为是取决于市场的运…...

Wine零知识学习4 —— Wine编译进阶详解

本系列第3篇文章Wine零知识学习3 —— Winetricks介绍及下载和运行讲述了Wentricks的下载及使用。在Winetricks的使用过程中会发现很多应用下载会出现问题&#xff0c;会提示32位程序无法运行在64位系统上。为什么会出现这个问题&#xff1f;又如何解决此问题&#xff1f;这就是…...

win10-右键打开windows terminal

文章目录windows terminal设置右键打开打开注册表添加一个右键选项新建一个项添加右键的名称和图标右键选项执行的命令测试windows terminal windows 新一代命命令行 设置右键打开 打开注册表 WinR 输入&#xff1a; regedit 定位&#xff1a; 计算机\HKEY_CLASSES_ROOT\Di…...

关于使用CMT2300A FIFO缓存区间设置为64Byte的问题

首先请看&#xff0c;CMT2300A 是什么产品&#xff0c;或者说是 模组吗&#xff1f; 请看介绍&#xff1a; https://blog.csdn.net/sishuihuahua/article/details/105095994 以及RFPDK 的使用: 这博客&#xff0c;记录了 RFPDK 的使用,以及遇到的一些问题 我说一下&#…...

网页概念、常用浏览器及内核、Web标准

网页、常用浏览器及内核、Web标准一、网页1.1、什么是网页&#xff1f;1.2、什么是HTML?&#xff08;重点&#xff09;1.3、网页的形成&#xff1f;二、常用浏览器三、浏览器内核四、Web标准&#xff08;重点&#xff09;4.1 为什么需要Web标准&#xff1f;4.2 Web标准的构成一…...

【刷题笔记】--搜索二维矩阵 II

题目&#xff1a; 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16…...

uni-app实战教程

一、准备 下载HBuilderX编辑器&#xff0c;前往下载注册百度AI账号&#xff0c;创建应用获得Appid和Secret 前往注册百度AI通用物体识别文档 前往查阅Uni-App文档 前往查阅HTML5 文档 前往查阅HTML5文档 前往查阅 二、介绍 开发工具&#xff1a;HBuilderX跨段框架&#xff0…...

SpringCloud: sentinel降级配置、热点参数、系统规则 配置到nacos

一、application.yml spring.cloud.sentinel cloud:nacos:discovery:# 服务注册地址server-addr: xxx.xxx.xxx.xxx:8848sentinel:eager: truetransport:# 控制台地址dashboard: localhost:9999# nacos配置持久化datasource:ds2:nacos:server-addr: xxx.xxx.xxx.xxx:8848dataId…...

交换机之配置netsflow

网络监测技术Sflow——提供完整的第二层到第四层信息&#xff0c;可以适应超大网络流量环境下的流量分析&#xff0c;让用户详细、实时地分析网络传输流的性能、趋势和存在的问题。 &#xff08;1&#xff09;特性&#xff1a; 支持在千兆戒更高速的网络上精确地监控网络流量…...

非科班出身学习软件测试可以么

IT行业里对小白最友好的非软件测试莫属了&#xff0c;但是也要看你个人在学习软件测试这件事上面花费了多少的时间和努力了~ 每年毕业季&#xff0c;IT行业依然是比较热门且收入是最高的行业。对于应届毕业生来说想要进入IT行业&#xff0c;除了前后端开发&#xff0c;软件测试…...

面试已上岸,成功拿到阿里和腾讯的入职offer,Java程序员面经全在这了,希望能帮到你!

前言 一开始的时候简历海投大多数都被拒绝了&#xff0c;后来自己找在腾讯上班的朋友帮忙改了一下简历&#xff0c;果然不一样了大多都能拿到面试机会&#xff0c;当然拿到后也没有那么顺利&#xff0c;面了差不多有十几家公司的样子&#xff0c;大大小小的都有&#xff0c;其中…...

Redisson分布式锁

目录一&#xff0c;场景说明二&#xff0c;Redisson分布式锁1&#xff0c;引入依赖2&#xff0c;生成RedissonClient对象3&#xff0c;测试三&#xff0c;说明一&#xff0c;场景说明 为什么需要分布式锁呢&#xff1f; 如果是单机服务&#xff0c;即只有一台服务器&#xff…...

LOF(Local Outlier Factor)原理

文章目录1定义2 k近邻距离&#xff08;k-distance of an object p&#xff09;3 k近邻4 可达距离5 局部可达密度6 lof参考&#xff1a;1定义 LOF&#xff08;Local Outlier Factor&#xff09;是一种描述异常值的方法。 2 k近邻距离&#xff08;k-distance of an object p&am…...

[ vulhub漏洞复现篇 ] Drupal<7.32 Drupalgeddon SQL注入漏洞(CVE-2014-3704)

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…...

Part 4 描述性统计分析(占比 10%)——下

文章目录【后续会持续更新CDA Level I&II备考相关内容&#xff0c;敬请期待】【考试大纲】【考试内容】【备考资料】【扩展知识】4、相关分析4.1、相关分析的描述——散点图4.2、相关分析的类型4.3、相关分析的度量4.3.1、协方差4.3.2、相关系数【后续会持续更新CDA Level …...

【一般人不会告诉你】比肩chatgtp的5款AI网站

话不多说&#xff0c;直接上连接 1. Dall-E: https://labs.openai.com/ 2. Codeformer: https://shangchenzhou.com/projects/Co... 3. Playground AI: https://playgroundai.com/ 4. Clip Drop: https://clipdrop.co/relight 5. Astria: https://www.strmr.com/examples …...

LA@相似方阵和对角化

文章目录相似方阵相似矩阵和特征值小结方阵相似对角化结论推论对角化方法归纳例方阵高次幂相似方阵 对角阵是矩阵中最简单的一类矩阵 对角阵相关的乘法运算是很高效的相似方阵是和对角阵相关的概念 设A和B是n阶方阵,如果存在n阶可逆方阵P,使得P−1APBP^{-1}APBP−1APB,则称方阵…...

存储类别、链接与内存管理(二)

0、前言概要 本篇来自于我的另外一篇博客存储类别、链接与内存管理&#xff08;一&#xff09;的续篇&#xff0c;主要分析了C语言中的不同存储类别、关键字以及使用的注意事项 1、自动变量 &#xff08;1&#xff09;属性 自动存储期、块作用域、无连接 &#xff08;2&a…...

JavaScript 入门教程||javascript 简介||JavaScript 用法

javascript 简介JavaScript 是互联网上最流行的脚本语言&#xff0c;这门语言可用于 HTML 和 web&#xff0c;更可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备。JavaScript 是脚本语言JavaScript 是一种轻量级的编程语言。JavaScript 是可插入 HTML 页面的编程代…...

新闻稿写作指南

当你想要传达一则新闻&#xff0c;写一份新闻稿是非常必要的。新闻稿的目的是让读者了解某个事件或信息&#xff0c;以及提供与之相关的背景信息和重要细节。以下是新闻稿的写作指南&#xff0c;帮助你写出一份清晰、简洁、有价值的新闻稿。1、选择一个有新闻价值的主题你的新闻…...

一文详解Redis持久化的两种方案

一文详解Redis持久化的两种方案1.RDB持久化2.RDB持久化原理3.AOF持久化4.RDB VS AOF1.RDB持久化 RDB全称Redis Database Backup file(Redis数据备份文件)&#xff0c;也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后&#xff0c…...

第六章 - 数据过滤where(where与and和or的组合用法)

第六章 - 数据过滤&#xff08;where的用法&#xff09;基本用法where的条件限制符等于号不等号! 或者<>小于<大于>小于等于<大于等于>between 的用法空值和非空值组合条件 and组合条件 orand 和 or 的计算次序in 和 not in基本用法 在查询语句中&#xff0…...

Oracle 定时任务例子

背景&#xff1a; 创建一个Oracle的定时任务&#xff0c;每天或指定时间 -----定义存储过程 create or replace procedure AAA_BBB as begin insert into AAA select * from BBB; commit; end; ----------------创建定时任务 declare xjobid number; begin DBMS_JOB.SUBM…...

Android常用9种自动化测试框架对比,Appium有哪些优势?

随着移动终端的普及&#xff0c;手机应用越来越多&#xff0c;也越来越重要。 App的回归测试用例数量也越来越多&#xff0c;全量回归也越来越消耗时间。移动 APP自动化测试 的难点移动 APP的UI自动化测试长久以来一直是一个难点&#xff0c;难点在于UI的”变”, 变化导致自动化…...

在vue2使用百度脑图的kityminder-core进行二次开发思维导图,给节点绑定数据后添加新的图标

需求说明&#xff1a;在给某个节点绑定文件数据后&#xff0c;用户并不能一眼看出哪个节点上绑定了数据&#xff0c;因此需要在绑定文件数据后给节点上加一个图标用于标识。 添加图标 1、在kityminder-core/src/module/file.js文件中添加代码 &#xff08;file.js文件如何添加…...

FPGA时序约束与分析 --- 时序约束概述

本系列参考文献 — FPGA时序与约束分析-吴厚航 FPGA从综合到实现需要的过程如下&#xff1a;synth_design -> opt_design -> place-design -> phys_opt_design -> route_design 1、时序约束的理解 2、时序约束的基本路径 3、时序约束的步骤 4、时序约束的主要方法…...

2022——寒假总结

文章目录背景报名摸索结果总结背景 大一上学期&#xff0c;刚上大学没有尽快适应&#xff0c;什么都没有学到。 因为疫情&#xff0c;所以平时的测试以及期末都是线上进行的&#xff0c;就没怎么认真学&#xff0c;网课直接划水。 我的生活与学习很不平衡&#xff0c;还热衷于参…...

C++11 Lambda表达式

文章首发公众号&#xff1a;iDoitnow 为什么引入Lambda Lambda表达式是一个可以内联在我们代码中的函数&#xff0c;我们可以将他传递给另外一个函数。在没有引入Lambda表达式之前&#xff0c;当我们遇到需要对多个数据&#xff0c;按照同一规则进行操作的时候&#xff0c;创建…...

冰湖灾害遥感监测评价与模拟分析

查看原文>>>mp.weixin.qq.com/s?__bizMzAxNzcxMzc5MQ&mid2247582638&idx1&sna22a1697b16a5edc2b74cb1ccf011689&chksm9be29cbeac9515a8227460103ae1b9f280af688eab0ce5a43448f9fa7c9cab820c389fcdc031&token10630879&langzh_CN#rd【专家简介…...

石家庄科技网站建设/北京百度搜索优化

原已实现从Jira平台抓取数据&#xff0c;并写人数据库中 因数据的直观性和可对比性&#xff0c;现需将数据绘制成曲线图的形式 计划将各个项目分别以Week为单位绘制新增bug数、关闭bug数以及遗留bug数的曲线图 写入Mysql 在Jira平台数据自动化获取中&#xff0c;我们已实现了…...

做母婴的网站有哪些/怎么制作网站教程步骤

六个例子彻底理解finally语句块 这篇博客主要弄清楚两个问题 1. finally块中的代码是否一定会执行 2. finally块中的代码什么时候被执行 首先开始第一个: finally块中的代码一定会被执行么? 答案是否定的,主要有以下几种情况: 1.try之前发生异常或者直接结束的情况. final…...

装潢设计软件免费/seo代码优化工具

一. 前言在使用实践中, fastjson其实确实是简便易用, 但是无奈会有一定的安全漏洞隐患, 为了安全起见, 避免作频繁的 fastjson版本升级, 因此考虑用安全性更佳的jackson来替代全线应用中的fastjson, 其中遇到的问题还相当多, 总结归纳下重点有如下几点:应用场景下时间日期的使用…...

咨询网站 模板/环球网

在上次的分享中&#xff0c;介绍了模型建立与使用梯度下降法优化参数、梯度校验&#xff0c;以及一些超参数的经验。 本节课的主要内容&#xff1a; 1链式法则 2深度学习框架中链式法则 3全连接神经网络 1、链式法则 目前我们所处的阶段&#xff1a; 学习了SVM softmax两个模型…...

上海招聘网站哪个靠谱/推广产品吸引人的句子

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主同意不得转载。 https://blog.csdn.net/zhangdaiscott/article/details/26488439 jeecg v3.0入门视频 链接: http://pan.baidu.com/s/1bnrMfiJpassword: 8q0k MiniDao持久层 入门视频 链接: http://pan.baidu.com…...

一个空间两个wordpress/月嫂免费政府培训中心

栈&#xff1a;​ 只有一个端口进入&#xff0c;元素先进后出FILO。 ​ 而栈内存正是使用了这种结构管理内存&#xff0c;所以才叫栈内存。 基于这个&#xff0c;我们通过链表的形式来实现栈的一系列操作&#xff0c;如入栈、出栈、获取栈顶元素等。 //节点结构体定义 typed…...