js基础篇(一)——数组的各种操作

js基础篇(三)——DOM的各种操作
js基础篇(二)——字符串的各种操作

1. 创建数组

创建一个数组,有三种方法。
下面的代码定义了一个名为 myCars的数组对象:

1.1 常规方法

var myCars=new Array(); 
myCars[0]="Saab";       
myCars[1]="Volvo";
myCars[2]="BMW";

1.2 简洁方法

var myCars=new Array("Saab","Volvo","BMW");

1.3 字面

推荐使用

var myCars=["Saab","Volvo","BMW"];

2.访问数组

通过指定数组名以及索引号码,你可以访问某个特定的元素。

2.1 取值

以下实例可以访问myCars数组的第一个值:

var name=myCars[0];

2.2 赋值

以下实例修改了数组myCars 的第一个元素:

myCars[0]="Opel";

3.数组属性与方法

3.1 数组属性

属性 描述
constructor 返回创建数组对象的原型函数。
length 设置或返回数组元素的个数。
prototype 允许你向数组对象添加属性或方法。

3.2 数组方法

数组也是对象,数组对象的属性可以称为数组方法,用来操作数组。
下列表格是总结,每个方法的示例在下面。

方法 描述
concat() 连接两个或更多的数组,并返回结果。
copyWithin() 从数组的指定位置拷贝元素到数组的另一个指定位置中。
every() 检测数值元素的每个元素是否都符合条件。
fill() 使用一个固定值来填充数组。
filter() 检测数值元素,并返回符合条件所有元素的数组。
find() 返回符合传入测试(函数)条件的数组元素。
findIndex() 返回符合传入测试(函数)条件的数组元素索引。
forEach() 数组每个元素都执行一次回调函数。
indexOf() 搜索数组中的元素,并返回它所在的位置。
join() 把数组的所有元素放入一个字符串。
lastIndexOf() 返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索。
map() 通过指定函数处理数组的每个元素,并返回处理后的数组。
pop() 删除数组的最后一个元素并返回删除的元素。
push() 向数组的末尾添加一个或更多元素,并返回新的长度。
reduce() 将数组元素计算为一个值(从左到右)。
reduceRight() 将数组元素计算为一个值(从右到左)。
reverse() 反转数组的元素顺序。
shift() 删除并返回数组的第一个元素。
slice() 选取数组的的一部分,并返回一个新数组。
some() 检测数组元素中是否有元素符合指定条件。
sort() 对数组的元素进行排序。
splice() 从数组中添加或删除元素。
toString() 把数组转换为字符串,并返回结果。
unshift() 向数组的开头添加一个或更多元素,并返回新的长度。
valueOf() 返回数组对象的原始值。
  1. concat() 方法
    • 定义和用法
      用于连接两个或多个数组。
      该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
    • 实例
//合并三个数组的值:
var hege = ["Cecilie", "Lone"];
var stale = ["Emil", "Tobias", "Linus"];
var kai = ["Robin"];
var children = hege.concat(stale,kai);
//children 输出结果:Cecilie,Lone,Emil,Tobias,Linus,Robin
  1. copyWithin()方法
    • 定义和用法
      用于从数组的指定位置拷贝元素到数组的另一个指定位置中。
    • 实例
//复制数组的前面两个元素到后面两个元素上:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.copyWithin(2, 0);
//fruits 输出结果:
//Banana,Orange,Banana,Orange
  1. every()方法
    • 定义和用法
      every()方法用于检测数组所有元素是否都符合指定条件(通过函数提供)。
      every() 方法使用指定函数检测数组中的所有元素:
      如果数组中检测到有一个元素不满足,则整个表达式返回 false,且剩余的元素不会再进行检测。
      如果所有元素都满足条件,则返回true
      注意:every()不会对空数组进行检测,不会改变原始数组。

    • 实例

//检测数组 ages 的所有元素是否都大于 18 :
var ages = [32, 33, 16, 40];
function checkAdult(age) {
          return age >= 18;
}
function myFunction() {
          document.getElementById("demo").innerHTML = ages.every(checkAdult);
}
//输出结果为:
false
  1. fill()方法
    • 定义和用法
      fill()方法用于将一个固定值替换数组的元素。

    • 实例

//使用固定值填充数组:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.fill("Runoob");
//fruits 输出结果:
Runoob,Runoob,Runoob,Runoob
  1. filter()方法
    • 定义和用法
      filter()方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
      注意: filter() 不会对空数组进行检测,不会改变原始数组。

    • 实例

//返回数组 ages 中所有元素都大于 18 的元素:
var ages = [32, 33, 16, 40];
function checkAdult(age) {
          return age >= 18;
}
function myFunction() {
          document.getElementById("demo").innerHTML = ages.filter(checkAdult);
}
//输出结果为:
32,33,40
  1. find()方法
    • 定义和用法
      find() 方法返回传入一个测试条件(函数)符合条件的数组第一个元素。
      find()方法为数组中的每个元素都调用一次函数执行:
      当数组中的元素在测试条件时返回true 时, find()返回符合条件的元素,之后的值不会再调用执行函数。
      如果没有符合条件的元素返回 -1
      注意: find()对于空数组,函数是不会执行的, 并没有改变数组的原始值。

    • 实例

//获取数组中年龄大于 18 的第一个元素
var ages = [3, 10, 18, 20];
function checkAdult(age) {
          return age >= 16;
}
function myFunction() {
          document.getElementById("demo").innerHTML = ages.find(checkAdult);
}
fruits 输出结果:
18
  1. findIndex()方法
    • 定义和用法
      findIndex()方法返回传入一个测试条件(函数)符合条件的数组第一个元素位置。
      findIndex() 方法为数组中的每个元素都调用一次函数执行:
      当数组中的元素在测试条件时返回 true 时, findIndex() 返回符合条件的元素的索引位置,之后的值不会再调用执行函数。
      如果没有符合条件的元素返回 -1
      注意: findIndex()对于空数组,函数是不会执行的,并没有改变数组的原始值。

    • 实例

//获取数组中年龄大于 18 的第一个元素索引位置
var ages = [3, 10, 18, 20];
function checkAdult(age) {
          return age >= 18;
}
function myFunction() {
          document.getElementById("demo").innerHTML = ages.findIndex(checkAdult);
}
//fruits 输出结果:
2
  1. forEach()方法
    • 定义和用法
      forEach()方法用于调用数组的每个元素,并将元素传递给回调函数。
      注意: forEach()对于空数组是不会执行回调函数的。

    • 实例

//列出数组的每个元素:
<button onclick="numbers.forEach(myFunction)">点我</button>
<p id="demo"></p>
<script>
demoP = document.getElementById("demo");
var numbers = [4, 9, 16, 25];
function myFunction(item, index) {
          demoP.innerHTML = demoP.innerHTML + "index[" + index + "]: " + item + "<br>";
}
</script>
//输出结果:
index[0]: 4
index[1]: 9
index[2]: 16
index[3]: 25
  1. indexOf()方法
    • 定义和用法
      indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。 该方法将从头到尾地检索字符串 stringObject,看它是否含有子串 searchvalue。开始检索的位置在字符串的 fromindex 处或字符串的开头(没有指定fromindex 时)。如果找到一个 searchvalue,则返回 searchvalue 的第一次出现的位置。stringObject 中的字符位置是从 0 开始的。 如果在数组中没找到字符串则返回 -1。 提示如果你想查找字符串最后出现的位置,请使用lastIndexOf() 方法。

    • 实例

//查找数组中的 "Apple" 元素:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var a = fruits.indexOf("Apple");
//a 结果输出:
2
以上输出结果意味着 "Apple" 元素位于数组中的第 2 个位置。
  1. join()方法
    • 定义和用法
      join()方法用于把数组中的所有元素转换一个字符串。
      元素是通过指定的分隔符进行分隔的。

    • 实例

//把数组中的所有元素转换为一个用-连接的字符串:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var energy = fruits.join("-");
//energy输出结果:
Banana-Orange-Apple-Mango
  1. lastIndexOf()方法
    • 定义和用法
      lastIndexOf()方法可返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索,字符位置是从 0 开始的。如果要检索的字符串值没有出现,则该方法返回 -1。
      提示: 如果你想查找字符串首次出现的位置,请使用indexOf()方法。

    • 实例

//查找数组元素 "Apple"出现的位置:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var a = fruits.lastIndexOf("Apple");
//a 输出结果:
2
  1. map()方法
    • 定义和用法
      map()方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
      map() 方法按照原始数组元素顺序依次处理元素。
      注意:map()不会对空数组进行检测,不会改变原始数组。

    • 实例

//返回一个数组,数组中元素为原始数组的平方根:
var numbers = [4, 9, 16, 25];
function myFunction() {
          x = document.getElementById("demo")
          x.innerHTML = numbers.map(Math.sqrt);
}
//输出结果为:
2,3,4,5
  1. pop()方法
    • 定义和用法
      pop()方法用于删除数组的最后一个元素并返回删除的元素。
      注意:此方法改变数组的长度!
      提示: 移除数组第一个元素,请使用shift()方法。

    • 实例

//移除最后一个数组元素
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.pop();
//fruits 结果输出:
Banana,Orange,Apple
  1. push()方法
    • 定义和用法
      push()方法可向数组的末尾添加一个或多个元素,并返回新的长度。
      注意: 新元素将添加在数组的末尾,此方法改变数组的长度。
      提示: 在数组起始位置添加元素请使用 unshift()方法。

    • 实例

//数组中添加新元素:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.push("Kiwi")
//fruits 结果输出:
Banana,Orange,Apple,Mango,Kiwi
  1. reduce()方法
    • 定义和用法
      reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
      注意:reduce() 对于空数组是不会执行回调函数的。

    • 实例1

//计算数组元素相加后的总和:
var numbers = [1, 2, 3, 4];
function getSum(total, num) {
          return total + num;
}
function myFunction(item) {
          document.getElementById("demo").innerHTML = numbers.reduce(getSum);
}
//输出结果:
10
- 实例2

数组arr = [1,2,3,4]求数组的和

//forEach 实现
var arr = [1,2,3,4],
sum = 0;
arr.forEach(function(e){sum += e;}); // sum = 10  just for demo
//map 实现
var arr = [1,2,3,4],
sum = 0;
arr.map(function(obj){sum += obj});//return undefined array. sum = 10  just for demo
//reduce实现
var arr = [1,2,3,4];
arr.reduce(function(pre,cur){return pre + cur}); // return 10

reduce() 专为累加这种操作而设计。

  1. reduceRight()方法
    • 定义和用法
      reduceRight()方法的功能和reduce() 功能是一样的,不同的是reduceRight()从数组的末尾向前将数组中的数组项做累加。
      注意: reduce()对于空数组是不会执行回调函数的。

    • 实例

//计算数组元素相加后的总和:
var numbers = [65, 44, 12, 4];
function getSum(total, num) {
          return total + num;
}
function myFunction(item) {
          document.getElementById("demo").innerHTML = numbers.reduceRight(getSum);
}
//输出结果:
125
  1. reverse()方法
    • 定义和用法
      reverse()方法用于颠倒数组中元素的顺序。

    • 实例

//颠倒数组中元素的顺序:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.reverse();
//fruits 结果输出:
Mango,Apple,Orange,Banana
  1. shift()方法
    • 定义和用法
      shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。
      注意: 此方法改变数组的长度!
      提示: 移除数组末尾的元素可以使用 pop()方法。
    • 实例
//从数组中移除元素:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.shift()
//fruits结果输出:
Orange,Apple,Mango
//fruits.shift()结果输出:
Banana
  1. slice()方法
    • 定义和用法
      slice()方法可从已有的数组中返回选定的元素。
      slice()方法可提取字符串的某个部分,并以新的字符串返回被提取的部分。
      注意: slice()方法不会改变原始数组。

    • 实例

//在数组中读取元素:
var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
var citrus = fruits.slice(1,3);
citrus 结果输出:
Orange,Lemon
  1. some()方法
    • 定义和用法
      some()方法用于检测数组中的元素是否满足指定条件(函数提供)。
      some()方法会依次执行数组的每个元素:
      如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。
      如果没有满足条件的元素,则返回false
      注意: some() 不会对空数组进行检测,不会改变原始数组。

    • 实例

//检测数组中是否有元素大于 18:
var ages = [3, 10, 18, 20];
function checkAdult(age) {
          return age >= 18;
}
function myFunction() {
          document.getElementById("demo").innerHTML = ages.some(checkAdult);
}
//输出结果为:
true
  1. sort()方法
    • 定义和用法
      sort()方法用于对数组的元素进行排序。
      默认排序顺序为按字母升序。
      注意:当数字是按字母顺序排列时"40"将排在"5"前面。
      使用数字排序,你必须通过一个函数作为参数来调用。
      函数指定数字是按照升序还是降序排列。
      注意:这种方法会改变原始数组!

    • 实例1

//数组排序:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();
//fruits 输出结果:
Apple,Banana,Mango,Orange
- 实例2
//降序函数  
var desc = function(x,y) {    
        if (x > y)      
        return -1;  //返回一个小于0 的数即可  
        else        
        return 1;  //返回一个大于0 的数即可  
}    
//升序函数  
var asc = function(x,y) {    
        if (x > y)      
        return 1;  //返回一个大于0 的数即可  
        else            
        return -1;  //返回一个小于0 的数即可  
}  
var arr2 = [4,6,4,2,7,9,0,1];    
arr2.sort(desc); //降序排序  
document.writeln(arr2);    //9,7,6,4,4,2,1,0
document.writeln("<br>");    
arr2.sort(asc); //升序排序  
document.writeln(arr2); //0,1,2,4,4,6,7,9
  1. splice()方法
    • 定义和用法
      splice() 方法用于插入、删除或替换数组的元素。
      从指定的索引开始删除若干元素,然后再从该位置添加若干元素,注意:这种方法会改变原始数组。
    • 实例
var arr = ['Microsoft', 'Apple', 'Yahoo', 'AOL', 'Excite', 'Oracle'];
// 从索引2开始删除3个元素,然后再添加两个元素:
arr.splice(2, 3, 'Google', 'Facebook'); // 返回删除的元素 ['Yahoo', 'AOL', 'Excite']
原数组arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']
// 只删除,不添加:
arr.splice(2, 2); // ['Google', 'Facebook']
原数组arr; // ['Microsoft', 'Apple', 'Oracle']
// 只添加,不删除:
arr.splice(2, 0, 'Google', 'Facebook'); // 返回[],因为没有删除任何元素
原数组arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']
  1. toString()方法
    • 定义和用法
      toString()方法可把数组转换为字符串,并返回结果。
      注意: 数组中的元素之间用逗号分隔。

    • 实例

//将数组转换为字符串:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.toString();
//fruits将输出:
Banana,Orange,Apple,Mango
  1. unshift()方法
    • 定义和用法
      unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。
      注意: 该方法将改变数组的数目。
      提示: 将新项添加到数组末尾,请使用push() 方法。

    • 实例

//将新项添加到数组起始位置:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.unshift("Lemon","Pineapple");
//fruits 将输出:
Lemon,Pineapple,Banana,Orange,Apple,Mango
//fruits.unshift 将输出:
6
  1. valueOf()方法
    • 定义和用法
      valueOf() 方法返回Array对象的原始值。
      该原始值由 Array 对象派生的所有对象继承。
      valueOf()方法通常由 JavaScript 在后台自动调用,并不显式地出现在代码中。
      注意: valueOf() 方法不会改变原数组。

    • 实例1

//valueOf() 是数组对象的默认方法。
var fruits = ["Banana", "Orange", "Apple", "Mango"];
var v=fruits.valueOf();
// fruits.valueOf()与 fruits返回值一样。
//v输出结果为:
Banana,Orange,Apple,Mango

valueOf():返回最适合该对象类型的原始值;
toString(): 将该对象的原始值以字符串形式返回。
这两个方法一般是交由JS去隐式调用,以满足不同的运算情况。
在数值运算里,会优先调用valueOf(),如a + b;
在字符串运算里,会优先调用toString(),如alert(c);

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,907评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,546评论 1 289
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,705评论 0 238
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,624评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,940评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,371评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,672评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,396评论 0 195
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,069评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,350评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,876评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,243评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,847评论 3 231
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,004评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,755评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,378评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,266评论 2 259

推荐阅读更多精彩内容

  • 必备知识:前面课程的学习 概述 数组是类似列表的对象,在原型中提供了遍历以及改变其中元素的很多方法。 数组的长度及...
    Airing阅读 273评论 3 2
  • 查询数组很容易,对于数组,我们可以这样理解:数组中每一个元素都是这个键值对键的一个有效值,如下面的例子:我们要查询...
    yzc123446阅读 485评论 0 1
  • 分类 索引数组索引值从0开始,依次递增 关联数组以字符串为索引,键和值对是无序组合,每个键都是唯一的 数组的定义 ...
    cws阅读 324评论 0 0
  • 一 基本概念 MongoDB中数据的结构为:库、集合、文档 1 数据库 多个集合可以组成数据库。MongoDb的单...
    周东波_db阅读 2,291评论 0 4
  • 我是不熬夜,来自武汉。西安一直是我想去的地方,高温假去西安游玩后回来画了游记,纪念这次出游。手绘 | 7天自助游玩...
    铃铛子阅读 1,125评论 17 11