热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

js数组对象

JS数组 数组对象 一种特殊的对象 1 js 其实没有真正的数组 只是用对象模拟数组 2 典型的数组 元素的数据类型相同 使用连续的内存存储 通过数字下标获取元素 image.png
JS数组

数组对象

一种特殊的对象
1 js 其实没有真正的数组
只是用对象模拟数组
2 典型的数组

  • 元素的数据类型相同
  • 使用连续的内存存储
  • 通过数字下标获取元素

    js数组对象
    image.png

3 js的数组

  • 元素数据类型可以不相同
  • 内存不一定连续(对象是随机存储的)
  • 不能通过数字下标,而是通过字符串下标
  • 这意味着数组可以有任何key
let arr = [1,2];
arr['any'] = 'any';
arr[10] = 10;
js数组对象
image.png
js数组对象
image.png
创建一个数组

新建

let arr = [1,2,3]
let arr = new Array(1,2,3)
let arr = new Array(3)

转化

let arr = '1,2,3'.split(',')
let arr = '123'.split('')
Array.from('123')
js数组对象
image.png

js数组对象
image.png

伪数组

  • let divList = document.querSelectorAll(‘div’)
  • 伪数组的原型链中没有数组的原型链

    js数组对象
    image.png

合并两个数组,得到新的数组

  • arr1.concat(arr2)

    js数组对象
    image.png

截取一个数组的一部分

  • arr1.slice(1)// 从第二个元素开始
  • arr1.slice(0)// 全部截取
  • 注意,js只提供浅拷贝

1 使用delete
let arr = [‘a’, ‘b’, ‘c’];
delete arr[‘0’]

js数组对象
image.png

不推荐
2 修改length

let arr = [1,2,3];
arr.length = 1;
js数组对象
image.png

不推荐使用
3 正确的删除操作
shift

arr = [1,2,3]
arr.shift()

pop

arr = [1,2,3]
arr.pop()

splice
arr.splice(index, 1)// 删除index的一个元素
arr.splice(index, 1, ‘x’)// 删除位置添加’x’
arr.splice(index, 1, ‘x’, ‘y’, ‘z’)// 在删除的位置添加’x’,’y’

arr = [1,2,3,4,5,6];
arr.splice();
  • 查看所有属性名
let arr = [1,2,3,4,5];
arr.x = 'xxx';
Object.keys(arr)
for(let key in arr){
  console.log(`${key}:${arr[key]}`)
}
js数组对象
image.png

由于数组对象,类似对象,可以随意添加属性,所以新增的属性会被遍历出来

  • 查看数字(字符串)属性名和值
for(let i = 0; i 

自己让i从0增长到length-1

arr.forEach(
  function (item, index){
    console.log(`${index}: ${item}`)
  }
)

也可以用forEach/map等原型上的函数

js数组对象
image.png

自己实现简易forEach

function forEach(array, fn){
    for(let i = 0; i 

查看单个属性

  • 跟对象一样
let arr = [111,222,333]
arr[0]
  • 索引越界
arr[arr.length] === undefined
arr[-1] === undefined
  • 查看是否有某个元素
arr.indexOf('value')

如果存在返回非-1的值

let arr2 = [12,23,45]
arr2.find(
  (x) => {
    return x%5 === 0;
   }
)

返回第一个满足条件的值

let arr2 = [12,23,45]
arr2.findIndex(
  (x) => {
    return x%5 === 0;
   }
)

返回第一个满足条件的下标

增加
  • 在尾部添加
arr.push(1,2,3)
  • 在头部添加
arr.unshift('x','y')
  • 在指定位置添加
arr.splice(index, 0, 'x')
  • 数组反转
let arr = [1,2,3]
arr.reverse()
js数组对象
image.png
let arr = [1,2,5,4];
arr.sort();
arr.sort(function(a,b) {
  if(a > b){
    return 1
  } else{
    return -1
  }
})
let arr = [
{
name: '明',
age: 22
},
{
name: '张',
age:36
},
{
name: 'w',
age: 21
}
]
arr.sort(
function(a, b){
  return a.age - b.age
}
)
js数组对象
image.png
  • map
let arr = [1,2,3,4,5,6]
arr.map(
(item) => {
  return item ** 2
}
)
js数组对象
image.png
  • filter
arr.filter(
(item) => item%2 === 0
)
js数组对象
image.png
  • reduce
arr.reduce(
(sum, item) => {
  return sum + item
},
0
)
js数组对象
image.png

reduce实现map

arr.reduce(
(result, item) => {
    return result.concat(item * item)
},
[]
)
js数组对象
image.png

reduce实现filter

arr.reduce(
(result, item) => {
    return result.concat(item % 2 === 0 ? item: [])
}, []
)

推荐阅读
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • php缓存ri,浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
    thinkPHP的F方法只能用于缓存简单数据类型,不支持有效期和缓存对象。S()缓存方法支持有效期,又称动态缓存方法。本文是小编日常整理有关thinkp ... [详细]
  • 本文介绍了在实现了System.Collections.Generic.IDictionary接口的泛型字典类中如何使用foreach循环来枚举字典中的键值对。同时还讨论了非泛型字典类和泛型字典类在foreach循环中使用的不同类型,以及使用KeyValuePair类型在foreach循环中枚举泛型字典类的优势。阅读本文可以帮助您更好地理解泛型字典类的使用和性能优化。 ... [详细]
  • 本文介绍了如何使用OpenXML按页码访问文档内容,以及在处理分页符和XML元素时的一些挑战。同时,还讨论了基于页面的引用框架的局限性和超越基于页面的引用框架的方法。最后,给出了一个使用C#的示例代码来按页码访问OpenXML内容的方法。 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
author-avatar
莪鈈稀罕rn
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有