js中数组的基本使用

JavaScript数组详解

javascript中数组的使用

Array对象

用于在单个变量中存储多个值,数组是值的有序集合,每个值叫做元素,每个元素在数组中都有数字组成的编号。数组是弱类型的,元素可以是不同类型的数据

var arr = [1,"abc",true,null,undefined,[1,2,3],{x:a}}]

Array对象的创建

1:var arr = new Array();//构造器
arr[0] = 1;
arr[1] = 2;
2:var arr = new Array(1,2,3);
3:var arr = new Array(6);
4:var arr = [1,2,3]

数组的增删:

var arr =[5,6,7,8,9]
console.log(arr)//5,6,7,8,9
console.log(arr.length)//5
arr.length=4
console.log(arr)//5,6,7,8
console.log(arr.length)//4
console.log(arr[2])//7
console.log(3 in arr)//true
delete arr[2]
console.log(arr)//5,6,3:8
console.log(arr[2])//undefined
console.log(3 in arr)//false
console.log(arr.length)//4

数组的迭代:

var arr = [1,2,3,4,5];
for(var i = 0 ; i < arr.length ; i++){
    console.log(arr[i])//1,2,3,4,5
}
for(i in arr){
    console.log(arr[i])//1,2,3,4,5
}
Array.prototype.a = "hello";
for(i in arr){
    console.log(arr[i])//1,2,3,4,5,hello
}

for(i in arr){
    if(arr.hasOwnProperty(i)){
        console.log(arr[i]);//1,2,3,4,5
    }
}

稀疏数组

var arr = [undefined];
console.log(0 in arr)//true

var arr = new Array(1);
console.log(0 in arr)//false

arr.length = 100;
arr[99] = 123;
console.log(99 in arr)//true
console.log(98 in arr)//false

var arr = [,,]
console.log(0 in arr)//false

Array对象方法

改变元数组的方法:

不改变元数组的方法,返回新的数组或其他:

1:valueOf()

返回数组对象的原始值

valueOf() 方法通常由 JavaScript 在后台自动调用,并不显式地出现在代码中。

语法:

arr.valueOf()

运行:

var arr = new Array(1,2,3,4,5);
document.write(arr +"<br/>");
document.write(arr.valueOf() +"<br/>");

输出:

1,2,3,4,5
1,2,3,4,5
2:toString()

把数组转化为字符串,并返回结果,不改变原来数组

语法:

arr.toString()

运行:

<script>
    var arr = new Array(1,2,3,4,5);
    document.write(arr +"<br/>");
    document.write(typeof arr +"<br/>");
    arr.toString();
    document.write(typeof arr+"<br/>");
    document.write(typeof arr.toString()+"<br/>");
    var _arr = arr.toString();
    document.write(_arr +"<br/>");
    document.write(typeof arr.toString()+"<br/>");
    document.write(typeof _arr +"<br/>");
</script>

输出:

1,2,3,4,5
object
object
string
1,2,3,4,5
string
string
3:toLocaleString()

把数组转化为本地字符串,并返回结果,不会改变原数组,和toString()类似

首先调用每个数组元素的 toLocaleString() 方法,然后使用地区特定的分隔符把生成的字符串连接起来,形成一个字符串。

语法:

arr.toLocaleString()
4:sort()

对数组的元素进行排序,改变的是原数组,不会创建新数组

是按照字符编码的顺序进行排序。数组的元素都转换成字符串,以便进行比较。

语法:

arr.sort()

运行:

<script>
    var arr = new Array(6);
    arr[0] = "George";
    arr[1] = "John";
    arr[2] = "Thomas";
    arr[3] = "James";
    arr[4] = "Adrew";
    arr[5] = "Martin";
    document.write(arr +"<br/>");
    document.write(arr.sort() +"<br/>");
    document.write(arr +"<br/>");
</script>

输出:

George,John,Thomas,James,Adrew,Martin
Adrew,George,James,John,Martin,Thomas
Adrew,George,James,John,Martin,Thomas

对数字大小排序

运行:

<script type="text/javascript">

function sortNumber(a,b)
{
return a - b
}

var arr = new Array(6)
arr[0] = "10"
arr[1] = "5"
arr[2] = "40"
arr[3] = "25"
arr[4] = "1000"
arr[5] = "1"

document.write(arr + "<br />")
document.write(arr.sort(sortNumber))

输出:

10,5,40,25,1000,1   
1,5,10,25,40,1000
5:reverse()

颠倒数组中元素的顺序,改变的是原数组,不会创建新数组

语法:

arr.reverse()

运行:

<script type="text/javascript">

    var arr = new Array(3)
    arr[0] = "George"
    arr[1] = "John"
    arr[2] = "Thomas"
    
    document.write(arr + "<br />")
    document.write(arr.reverse())

</script>

输出:

George,John,Thomas
Thomas,John,George
6:push()

在数组的末尾添加一个或多个元素,并返回数组的长度,改变的是原数组,不会创建新数组

语法:

arr.push("xxx")

运行:

<script>
    var arr = new Array(6);
    arr[0] = "George";
    arr[1] = "John";
    arr[2] = "Thomas";
    arr[3] = "James";
    arr[4] = "Adrew";
    arr[5] = "Martin";
    document.write(arr +"<br/>");
    document.write(arr.push("tom") +"<br/>");
    document.write(arr +"<br/>");
</script>

输出:

George,John,Thomas,James,Adrew,Martin
7
George,John,Thomas,James,Adrew,Martin,tom
7:pop()

删除并返回数组的最后一个元素,改变的是原数组,不会创建新数组,

如果数组是空的,那么 pop() 方法将不进行任何操作,返回 undefined 值。

语法:

arr.pop()

运行:

<script>
    var arr = new Array(6);
    arr[0] = "George";
    arr[1] = "John";
    arr[2] = "Thomas";
    arr[3] = "James";
    arr[4] = "Adrew";
    arr[5] = "Martin";
    document.write(arr +"<br/>");
    document.write(arr.pop() +"<br/>");
    document.write(arr +"<br/>");
</script>

输出:

George,John,Thomas,James,Adrew,Martin
Martin
George,John,Thomas,James,Adrew
8:unshift()

向数组的开头添加一个或多个元素,并返回数组的长度,改变的是原数组,不会创建新数组

语法:

arr.unshift("xxx")

运行:

<script>
    var arr = new Array(6);
    arr[0] = "George";
    arr[1] = "John";
    arr[2] = "Thomas";
    arr[3] = "James";
    arr[4] = "Adrew";
    arr[5] = "Martin";
    document.write(arr +"<br/>");
    document.write(arr.unshift("tom") +"<br/>");
    document.write(arr +"<br/>");
</script>

输出:

George,John,Thomas,James,Adrew,Martin
7
tom,George,John,Thomas,James,Adrew,Martin
9:shift()

删除并返回数组的第一个元素,改变的是原数组,不会创建新数组,

如果数组是空的,那么 shift() 方法将不进行任何操作,返回 undefined 值。

unshift() 方法无法在 Internet Explorer 中正确地工作!

语法:

arr.shift()

运行:

<script>
    var arr = new Array(6);
    arr[0] = "George";
    arr[1] = "John";
    arr[2] = "Thomas";
    arr[3] = "James";
    arr[4] = "Adrew";
    arr[5] = "Martin";
    document.write(arr +"<br/>");
    document.write(arr.shift() +"<br/>");
    document.write(arr +"<br/>");
</script>

输出:

George,John,Thomas,James,Adrew,Martin
George
John,Thomas,James,Adrew,Martin
10:concat()

连接两个或多个数组,并返回结果,不会改变原数组,创建新数组

语法:

arr.concat([a,b])

运行:

<script>
    var a = [1,2,3];
    var b = [4,5,6];
    var b = [7,8];
    document.write(a.concat(b,c)+"<br/>");
    document.write(a+"<br/>");
    document.write(b+"<br/>");
    document.write(c+"<br/>");
</script>

输出:

1,2,3,4,5,6,7,8
1,2,3
4,5,6
7,8
11:join()

数组转化为字符串,并通过指定的分隔符进行分隔,不改变原数组

语法:

arr.join("")

运行:

<script>
    var arr = new Array(3)
    arr[0] = "George"
    arr[1] = "John"
    arr[2] = "Thomas"
    document.write(typeof arr+"<br/>");
    document.write(arr.join()+"<br/>");
    document.write(typeof arr+"<br/>");
    document.write(typeof arr.join()+"<br/>");
    document.write(arr.join(".")+"<br/>");
    document.write(arr.join("|")+"<br/>");
    document.write(arr.join("&")+"<br/>");
</script>

输出:

object
George,John,Thomas
object
string
George.John.Thomas
George|John|Thomas
George&John&Thomas

输入:

function repeatString(str,n){
    return new Array(n+1).join(str)
}

调用:

repeatString("a",4)
repeatString("hi",4)

输出:

aaaa
hihihihi
12:slice()

从已有的数组中返回选定的元素,不改变原数组,创建新数组

语法:

arr.slice(start,end)

运行:

<script>
    var arr = new Array(3)
    arr[0] = "George"
    arr[1] = "John"
    arr[2] = "Thomas"
    document.write(arr+"<br/>");
    document.write(arr.slice(1)+"<br/>");
    document.write(arr+"<br/>");
</script>

输出:

George,John,Thomas
John,Thomas
George,John,Thomas
13:splice()

删除元素,并向数组添加新元素,改变原数组,不会创建新数组

语法:

arr.splice(index,num,"xxx")
index:删除起始位置
num:删除个数
xxx:添加新数组

运行:

<script>
    var arr = new Array(3)
    arr[0] = "a"
    arr[1] = "b"
    arr[2] = "c"
    document.write(arr+"<br/>");
    document.write(arr.splice(1,2,"d")+"<br/>");
    document.write(arr+"<br/>");
</script>

输出:

a,b,c
b,c
a,d
14:toSource()

返回该对象的源代码

只有 Gecko 核心的浏览器(比如 Firefox)支持该方法,也就是说 IE、Safari、Chrome、Opera 等浏览器均不支持该方法。

toSource() 方法通常由 JavaScript 在后台自动调用,并不显式地出现在代码中。

语法:

arr.toSource()
15:indexOf()

ES5

元素存在,返回元素所在的位置,不存在,返回-1

语法:

arr.indexOf("a")//从第一个位置找
arr.indexOf("a",n)//从第n+1个位置找

运行:

<script>
    var arr = new Array(3)
    arr[0] = "a"
    arr[1] = "b"
    arr[2] = "c"
    document.write(arr+"<br/>");
    document.write(arr.indexOf("b")+"<br/>");
    document.write(arr+"<br/>");
</script>

输出:

a,b,c
1
a,b,c
16:lastIndexOf()

ES5

返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索。不存在,返回-1

语法:

arr.lastIndexOf("a")//从倒数一个位置找
arr.lastIndexOf("a",n)//从倒数n+1个位置找

运行:

<script>
    var arr = new Array(3)
    arr[0] = "a"
    arr[1] = "b"
    arr[2] = "c"
    document.write(arr+"<br/>");
    document.write(arr.lastIndexOf("c")+"<br/>");
    document.write(arr+"<br/>");
</script>

输出:

a,b,c
2
a,b,c
17:every()

ES5

检查数组中所有元素是否符合指定条件(通过函数处理)

  • every()方法使用指定函数检测数组中的所有元素
  • 如果数组中检测到有一个元素不满足,则整个表达式返回false,且剩余的元素不会在检测
  • 如果所有元素都满足条件,则返回true
  • every()不会对空数组检测
  • every()不会改变原数组

语法:

arr.every(check)
function check(value,index,arr){}
value:每一个值
index:索引值
arr:原数组

运行:

<script>
    var arr = new Array(3)
    arr[0] = "23";
    arr[1] = "34";
    arr[2] = "25";
    document.write(arr+"<br/>");
    document.write(arr.every(check)+"<br/>");
    document.write(arr+"<br/>");

    function check(value,idnex,arr){
        document.write(arr+"<br/>");
        return value>18
    }
</script>

输出:

23,34,25
23,34,25
23,34,25
23,34,25
true
23,34,25
18:some()

ES5

检查数组是否有元素符合指定条件(通过函数处理)

  • some() 方法使用指定函数检测数组中的所有元素
  • 如果数组中检测到有一个元素满足条件,则整个表达式返回 true ,且剩余的元素不会再进行检测。
  • 如果没有元素都满足条件,则返回 false
  • some() 不会对空数组进行检测。
  • some() 不会改变原始数组。

语法:

arr.some(check)
function check(value,index,arr){}
value:每一个值
index:索引值
arr:原数组

运行:

<script>
    var arr = new Array(3)
    arr[0] = "23";
    arr[1] = "34";
    arr[2] = "25";
    document.write(arr+"<br/>");
    document.write(arr.some(check)+"<br/>");
    document.write(arr+"<br/>");

    function check(value,idnex,arr){
        document.write(arr+"<br/>");
        return value>18
    }
</script>

输出:

23,34,25
23,34,25
true
23,34,25
19:filter()

ES5

检测数值元素,并返回符合条件的所有元素的数组

  • filter()方法创建一个新数组,新数组中的元素是经过检测之后符合条件的所有元素
  • filter() 不会对空数组进行检测。
  • filter() 不会改变原始数组。

语法:

arr.filter(check)
function check(value,index,arr){}
value:每一个值
index:索引值
arr:原数组

运行:

<script>
    var arr = new Array(3)
    arr[0] = "23";
    arr[1] = "34";
    arr[2] = "25";
    document.write(arr+"<br/>");
    document.write(arr.filter(check)+"<br/>");
    document.write(arr+"<br/>");

    function check(value,idnex,arr){
        document.write(arr+"<br/>");
        return value>24
    }
</script>

输出:

23,34,25
23,34,25
23,34,25
23,34,25
34,25
23,34,25
20:map()

ES5

返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。

  • map()方法创建一个新数组,新数组中的元素是经过检测之后符合条件的所有元素
  • map() 不会对空数组进行检测。
  • map() 不会改变原始数组。

语法:

arr.map()

运行:

<script>
    var arr = new Array(3)
    arr[0] = "1";
    arr[1] = "2";
    arr[2] = "3";
    document.write(arr+"<br/>");
    document.write(arr.map(check)+"<br/>");
    document.write(arr+"<br/>");

    function check(value,index,arr){
        console.log(value)
        console.log(index)
        console.log(arr)
        return Math.sqrt(value)
    }
</script>

输出:

1,2,3
1,1.4142135623730951,1.7320508075688772
1,2,3
21:forEach()

输入:

var arr = [1,2,3,,4,5]
arr.forEach(function(value,index,_arr){
    console.log("value:"+value+";index:"+index+";原元素:"+_arr)
})

输出:

value:1;index:0;原元素:1,2,3,,4,5
value:2;index:1;原元素:1,2,3,,4,5
value:3;index:2;原元素:1,2,3,,4,5
value:4;index:4;原元素:1,2,3,,4,5
value:5;index:5;原元素:1,2,3,,4,5
22:reduce

ES5

对元素的俩俩遍历操作

输入:

var arr = [1,2,3,4]
var sum = arr.reduce(function(x,y){
    return (x+y)
})
console.log(sum)

输出:

10

输入:

var arr = [5,6,4]
var sum = arr.reduce(function(x,y){
    console.log(x+":"+y)        
    return x > y ? x : y;
})
console.log(sum)

输出:

5:6
6:4
6
22:reduceRight

ES5

对元素的俩俩反向遍历操作

输入:

var arr = [1,2,3,4]
var sum = arr.reduceRight(function(x,y){
    return (x+y)
})
console.log(sum)

输出:

10

输入:

var arr = [5,6,4]
var sum = arr.reduceRight(function(x,y){
    console.log(x+":"+y)
    return x > y ? x : y;
})
console.log(sum)

输出:

4:6
6:5
6
23 isArray()

判断是否为数组

语法:

Array.isArray([])//true
[] instanceof Array //true
({}).toString.apply([]) === "[object Array]"//true
[].constructor === Array //true

Array对象属性

1:constructor

返回创建此对象的数组函数的引用

语法:

arr.constructor

运行:

<script>
    var arr = new Array();
    document.write(typeof arr +"<br/>");
    document.write(arr.constructor +"<br/>");
    document.write(arr.constructor == Array);
</script>

输出:

object
function Array() { [native code] }
true
2:length

设置或者返回数组中的元素的长度

语法:

array.length

说明:

数组的 length 属性总是比数组中定义的最后一个元素的下标大 1。

属性 length 声明了数组中的元素的个数。

数组的 length 属性在用构造函数 Array() 创建数组时被初始化。

给数组添加新元素时,将更新 length 的值。

设置 length 属性可改变数组的大小。如果设置的值比其当前值小,数组将被截断,其尾部的元素将丢失。如果设置的值比它的当前值大,数组将增大,新的元素被添加到数组的尾部,它们的值为 undefined。

运行:

<script>
    var arr1 = new Array();
    var arr2 = new Array(2);
    arr1[0] = "a";
    arr1[1] = "b";
    arr1[2] = "c";

    document.write("arr1改变前:"+arr1+"<br/>");
    document.write("arr1改变前的长度:"+arr1.length+"<br/>");
    arr1.length = 2;
    document.write("arr1改变后:"+arr1+"<br/>");
    document.write("arr1改变后的长度:"+arr1.length+"<br/>");

    document.write("arr2改变前:"+arr2+"<br/>");
    document.write("arr2改变前的长度:"+arr2.length+"<br/>");
    arr2.length = 5;
    document.write("arr2改变后:"+arr2+"<br/>");
    document.write("arr2改变后的长度:"+arr2.length+"<br/>");
</script>

输出:

arr1改变前:a,b,c
arr1改变前的长度:3
arr1改变后:a,b
arr1改变后的长度:2
arr2改变前:,
arr2改变前的长度:2
arr2改变后:,,,,
arr2改变后的长度:5
3:prototype

向数组添加属性和方法

语法:

arr.prototype

运行:

<script>
    function Person(name,age){
        this.name= name;
        this.age = age;
    }
    var person = new Person("frank",28);
    Person.prototype.goods = "篮球";
    Person.prototype.age = 30;
    document.write("goods:"+person.goods+"<br/>");
    document.write("age:"+person.age+"<br/>");
    document.write("name:"+person.name+"<br/>");
</script>

输出:

goods:篮球
age:28
name:frank

转载于:https://www.cnblogs.com/bijiapo/p/5440512.html

<think>我们被要求使用中文回答,并且遵循特定的格式要求。 用户的问题:我想了解JavaScript数组map方法的使用 请问JavaScript数组map方法详解及使用示例 根据引用[3]中提供的信息,我们有关于map方法的简单示例。同时,结合其他引用,我们可以更全面地介绍map方法。 回答结构: 1. 首先介绍map方法的基本概念和作用。 2. 语法说明。 3. 使用示例,包括基本示例和可能的复杂示例。 4. 注意事项或常见用法。 另外,根据系统指令,我们需要生成相关问题。 引用[3]的示例:const numbers = [1, 2, 3]; const doubled = numbers.map(num => num * 2); console.log(doubled); // [2, 4, 6](新数组) 我们还可以结合引用[1]和[2]中的信息,但引用[2]主要讲的是reduce,引用[4]提到了includes和sort,所以主要参考引用[1]和[3]。 注意:引用[1]提到“数组方法是内置工具,允许开发者高效地添加、删除、转换、迭代和搜索数组元素”,其中map属于转换和迭代。 步骤: 1. 介绍map方法:map()方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。 2. 语法:arr.map(callback(currentValue[, index[, array]])[, thisArg]) 3. 参数说明:callback生成新数组元素的函数,可以接收三个参数:当前元素、当前元素的索引、原数组。thisArg(可选)执行callback时使用的this值。 4. 返回值:新数组,不改变原数组。 示例: - 基本示例:将数组中的每个元素乘以2。 - 使用索引:将元素乘以它的索引。 - 复杂示例:处理对象数组。 5. 注意事项:map不会改变原数组(但可以在callback中改变原数组,不过不推荐),map方法会跳过空位(但根据ES标准,空位会被保留,具体行为可能因环境而异)。 生成相关问题: 1. map方法和其他数组方法(如filter、reduce)有什么区别? 2. 如何在map方法中使用thisArg参数? 3. map方法在异步编程中的应用? 注意:在回答中引用段落末尾添加引用标识,例如[^1]。由于引用[3]中提到了map,我们可以在介绍时引用。 开始回答:</think>### JavaScript 数组 map() 方法详解 `map()` 是 JavaScript 数组的核心迭代方法,用于**创建新数组**并**批量转换元素**。它不会修改原数组,而是返回一个包含转换结果的新数组[^3]。 #### 核心特性 1. **非破坏性**:原数组保持不变 2. **链式调用**:可与其他数组方法(如 `filter()`)组合 3. **元素转换**:对每个元素执行指定操作 4. **返回新数组**:长度始终等于原数组 #### 语法 ```javascript const newArray = arr.map(callback(currentValue[, index[, array]]) { // 返回转换后的元素 }[, thisArg]); ``` - **`callback`**:处理每个元素的函数(必需) - **`currentValue`**:当前处理的元素 - **`index`**:当前元素索引(可选) - **`array`**:原数组引用(可选) - **`thisArg`**:执行回调时的 `this` 值(可选) --- ### 使用示例 #### 基础数值转换 ```javascript const numbers = [1, 2, 3]; const squared = numbers.map(num => num ** 2); console.log(squared); // [1, 4, 9] ``` #### 对象数组重构 ```javascript const users = [ {id: 1, name: "Alice"}, {id: 2, name: "Bob"} ]; const userNames = users.map(user => user.name); console.log(userNames); // ["Alice", "Bob"] ``` #### 使用索引参数 ```javascript const letters = ['a', 'b', 'c']; const indexed = letters.map((char, idx) => `${idx}-${char}`); console.log(indexed); // ["0-a", "1-b", "2-c"] ``` #### 结合其他方法(链式调用) ```javascript const data = [5, 12, 8, 130]; const processed = data .filter(x => x > 10) // 先过滤 [12, 130] .map(x => x * 0.8); // 再转换 [9.6, 104] console.log(processed); // [9.6, 104] ``` --- ### 注意事项 1. **空元素处理**:稀疏数组中的空槽(empty)会保留但不会触发回调 ```javascript const arr = [1, , 3]; arr.map(x => x * 2); // [2, empty, 6] ``` 2. **避免副作用**:不应在回调中修改原数组(违反函数式编程原则) 3. **异步限制**:不能直接处理异步操作,需配合 `Promise.all()` ```javascript // 错误示例 const urls = ['url1', 'url2']; const results = urls.map(async url => await fetch(url)); // 返回Promise数组 // 正确做法 Promise.all(urls.map(url => fetch(url))); ``` --- ### 与类似方法对比 | 方法 | 返回类型 | 是否修改原数组 | 用途 | |------------|----------------|----------------|--------------------------| | `map()` | 新数组 | ❌ | 元素转换 | | `forEach()`| undefined | ❌ | 遍历操作(无返回值) | | `filter()` | 新数组(子集) | ❌ | 条件筛选 | | `reduce()` | 任意类型 | ❌ | 累积计算[^2] |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值