数组Array
<h3>数组(Array)</h3>
<p>1、arr.concat(arr1,arr2,...):连接两个或多个数组。该方法不会改变现有的数组,仅会返回被连接数组的一个副本。</p>
<pre><code>var arr1 = [1,2,3]
var arr2 = ['a','b','c']
var arr3 = [111,222,333]
var arr = arr1.concat(arr1,arr2,arr3)
console.log(arr)//[1, 2, 3, 1, 2, 3, "a", "b", "c", 111, 222, 333]</code></pre>
<p>2、arr.join():把数组中所有元素放入一个字符串中,用指定分隔符连接,默认使用','分割,不改变原数组。</p>
<pre><code>var arr = [1,2,3]
var str = arr.join('')
console.log(str)//123</code></pre>
<p>3、arr.push(obj1,obj2,...):向数组的末尾添加一个或多个元素,并返回新的长度。末尾添加,返回的是长度,会改变原数组。</p>
<pre><code>var arr = [1,2,3]
var res = arr.push(1,2,3)
console.log(arr)//[1,2,3,1,2,3]
console.log(res)//6</code></pre>
<p>4、arr.pop():删除并返回数组的最后一个元素。返回最后一个元素,会改变原数组。</p>
<pre><code>var arr = [1,2,3]
var res = arr.pop()
console.log(arr)//[1,2]
console.log(res)//3</code></pre>
<p>5、arr.shift():把数组的第一个元素从其中删除,并返回第一个元素的值。返回第一个元素,改变原数组。</p>
<pre><code>var arr = [1,2,3]
var res = arr.shift()
console.log(arr)//[2,3]
console.log(res)//1</code></pre>
<p>6、arr.unshift(obj1,obj2,...):向数组的开头添加一个或更多元素,并返回新的长度。返回新长度,改变原数组。</p>
<pre><code>var arr = [1,2,3]
var res = arr.unshift(1,2,3)
console.log(arr)//[1,2,3,1,2,3]
console.log(res)//6</code></pre>
<p>7、arr.slice(start,end):分割出一个新数组,元素内容[start,end),不改变原数组(end为负值时为倒数)</p>
<pre><code>var arr = [1,2,3]
var res = arr.slice(1,3)
console.log(arr)//[1,2,3]
console.log(res)//[2,3]</code></pre>
<p>8、arr.splice(start,n):删除从start开始的n个元素并返回被删元素的数组,改变原数组</p>
<pre><code>var arr = [1,2,3]
var res = arr.splice(1,2)
console.log(arr)//[1]
console.log(res)//[2,3]</code></pre>
<p>9、arr.sort():按照 Unicode code 位置排序,默认升序,改变原数组,传入回调时按大小排序</p>
<pre><code>var arr1 = [12,44,9,23,'a','?']
arr1.sort()
console.log(arr1)//unicode 排序
arr1.sort(function(a,b){return a-b})
console.log(arr1)//增序
arr1.sort(function(a,b){return b-a})
console.log(arr1)//降序</code></pre>
<p>10、arr.reverse():颠倒数组中元素的顺序,返回颠倒后的数组,改变原数组</p>
<pre><code>var arr1 = [12,44,9,23,'a','?']
arr1.reverse()//["?", "a", 23, 9, 44, 12]</code></pre>
<p>11、arr.indexOf(v,start):顺序查找数组中的值的位置,从start位置开始查找,默认从头(0)开始,不存在时返回-1;
arr.lastIndexOf(v,start):逆序查找数组中的值的位置,从start位置开始查找,默认从最后一个开始,不存在时返回-1;
12、arr.every((item,index,arr)=>{}):循环操作数组中的元素,每一个都为true时,every才返回true,否则返回false并停止</p>
<pre><code>var arr1 = [12,44,9,23]
var res = arr1.every((item,index,arr)=>{
console.log('item',item)
console.log('index',index)
console.log('arr',arr)
return item>10
})
console.log(res)//false</code></pre>
<p>12、arr.some((item,index,arr)=>{}):循环操作数组中的元素,只要有返回值为true时,some就返回true并停止,若全部返回值都是false,则some返回false</p>
<pre><code>var arr1 = [12,44,9,23]
var res = arr1.some((item,index,arr)=>{
console.log('item',item)
console.log('index',index)
console.log('arr',arr)
return item>10
})
console.log(res)//true</code></pre>
<p>13、arr.filter((item,index,arr)=>{}):循环操作数组中的元素,返回为true时的所有元素的集合</p>
<pre><code>var arr1 = [12,44,9,23]
var res = arr1.filter((item,index,arr)=>{
console.log('item',item)
console.log('index',index)
console.log('arr',arr)
return item>10
})
console.log(res)//[12, 44, 23]</code></pre>
<p>14、arr.map((item,index,arr)=>{}):循环操作数组中的元素,返回所有元素的结果集合</p>
<pre><code>var arr1 = [12,44,9,23]
var res = arr1.map((item,index,arr)=>{
console.log('item',item)
console.log('index',index)
console.log('arr',arr)
return item*2
})
console.log(res)//[24, 88, 18, 46]</code></pre>
<p>15、arr.forEach((item,index,arr)=>{}):循环操作数组中的元素,没有返回值</p>
<pre><code>var arr1 = [12,44,9,23]
var arr2 = []
var res = arr1.forEach((item,index,arr)=>{
console.log('item',item)
console.log('index',index)
console.log('arr',arr)
arr2.push(item)
})
console.log(res)//undefined
console.log(arr2)//[12,44,9,23]</code></pre>
<p>16、arr.find((item,index,arr)=>{}):循环操作数组中的元素,返回第一个符合要求的值并停止</p>
<pre><code>var arr1 = [12,44,9,23]
var res = arr1.find((item,index,arr)=>{
console.log('item',item)
console.log('index',index)
console.log('arr',arr)
return item<10
})
console.log(res)//9</code></pre>
<p>17、arr.findIndex((item,index,arr)=>{}):循环操作数组中的元素,返回第一个符合要求的下标并停止</p>
<pre><code>var arr1 = [12,44,9,23,2]
var res = arr1.findIndex((item,index,arr)=>{
console.log('item',item)
console.log('index',index)
console.log('arr',arr)
return item<10
})
console.log(res)//2</code></pre>
<p>18、arr.fill(value,start,end):用新值替换掉旧值,改变原数组,可指定范围
19、arr.copyWithin(target, start, end):复制数组中的元素,从下标为target开始替换,替换的内容arr[start,end)
20、Array.from(obj):将类数组对象、可遍历(iterable)的对象(字符串可以,数值不可以)转化为真正的数组
21、Array.of():用于将一组值,转换为数组。这个方法的主要目的,是弥补数组构造函数 Array() 的不足。因为参数个数的不同,会导致 Array() 的行为有差异。</p>
<pre><code>Array() // []
Array(3) // [, , ,] length:3
Array(100)//[empty*100] length:100
Array(3, 11, 8) // [3, 11, 8]
Array.of(7); // [7]
Array.of(1, 2, 3); // [1, 2, 3]</code></pre>
<p>22、arr.entries():返回迭代器,返回键值对的集合,可用next()方法逐一输出</p>
<pre><code>var arr1 = [111,222,333,444]
var itertor = arr1.entries()
console.log(itertor.next())//{value:[0,111],done:false}
console.log(itertor.next())//{value:[1,222],done:false}
console.log(itertor.next())//{value:[2,333],done:false}
console.log(itertor.next())//{value:[3,444],done:false}
console.log(itertor.next())//{value:undefined,done:true}
//逐条打印迭代器的value(数组键值对的集合)
for(let kv of arr1.entries()){
console.log(kv)
}
//[0,111]
//[1,222]
//[2,333]
//[3,444]</code></pre>
<p>23、arr.keys():返回迭代器,返回数组的下标,可用next()方法逐一输出</p>
<pre><code>var arr1 = [111,222,333,444]
var itertor = arr1.keys()
console.log(itertor.next())//{value:111,done:false}
console.log(itertor.next())//{value:222,done:false}
console.log(itertor.next())//{value:333,done:false}
console.log(itertor.next())//{value:444,done:false}
console.log(itertor.next())//{value:undefined,done:true}
for(let k of arr1.keys()){
console.log(k)
}
//0
//1
//2
//3</code></pre>
<p>24、arr.values():返回迭代器,返回数组的值,可用next()方法逐一输出</p>
<pre><code>var arr1 = [111,222,333,444]
var itertor = arr1.values()
console.log(itertor.next())//{value:111,done:false}
console.log(itertor.next())//{value:222,done:false}
console.log(itertor.next())//{value:333,done:false}
console.log(itertor.next())//{value:444,done:false}
console.log(itertor.next())//{value:undefined,done:true}
for(let v of arr1.values()){
console.log(v)
}
//111
//222
//333
//444</code></pre>
<p>25、arr.includes(v,start):判断数组中是否包含该元素,返回true or false
26、Array.isArray(obj):判断是不是数组
27、* <code>reduce()</code></p>
<pre><code>arr = ['a','b','c']
arr.reduce(function(accumulator,curVal,curIndex,arr){
// code
},initData)</code></pre>
<blockquote>
<p>arr不能为空数组,否则不执行回调
accumulator:累计值,上一次回调返回的值或initData
initData:reduce的第一项,可为空数组[];若不写则无第一项的输出,arr的reduce回调第0项为空,</p>
</blockquote>