1. 程式人生 > >Js日常筆記之數組

Js日常筆記之數組

排序 ron obj call 實現 問題 自定義 字符串 typeof

1、Array構造函數有一個很大的問題,就是不同的參數,會導致它的行為不一致,es6好像專門為此對數組有升級

因此,不建議使用new Array生成新數組,直接使用數組字面量[...]是更好的做法。

2、Array.isArray方法用來判斷一個值是否為數組。它可以彌補typeof運算符的不足

var a = [1, 2, 3];

typeof a // "object"
Array.isArray(a) // true

3、push()和pop() 結合使用,就構成了“後進先出”的棧結構(stack)

push方法用於在數組的末端添加一個或多個元素,並返回添加新元素後的數組長度,

pop方法用於刪除數組的最後一個元素,並返回該元素。

4、join()方法以參數作為分隔符,將所有數組成員組成一個字符串返回。如果不提供參數,默認用逗號分隔。

如果數組成員是undefinednull或空位,會被轉成空字符串

[undefined, null].join(‘#‘)
// ‘#‘

[‘a‘,, ‘b‘].join(‘-‘)
// ‘a--b‘

通過call方法,這個方法也可以用於字符串

Array.prototype.join.call(‘hello‘, ‘-‘)
// "h-e-l-l-o"

5、concat()方法用於多個數組的合並。返回一個新數組,原數組不變。

concat也可以接受其他類型的值作為參數。它們會作為新的元素,添加數組尾部。

[1, 2, 3].concat(4, 5, 6)
// [1, 2, 3, 4, 5, 6]

// 等同於
[1, 2, 3].concat(4, [5, 6])
[1, 2, 3].concat([4], [5, 6])

註意:concat方法返回當前數組的一個淺拷貝,如果數組中存在復合類型數據(比如對象),原數據改變,數組元素也會隨之改變;

let d={a:1}
a=a.concat(d)
//(8) [{…}, 2, "a", "b", true, 4, 5, {…}]

a[7]//{a: 1}
d.a=3//3
a[7]//{a: 3}

6、shift()和unshift()

shift方法用於刪除數組的第一個元素,並返回該元素。push

shift結合使用,就構成了“先進先出”的隊列結構(queue)

unshift方法用於在數組的第一個位置添加一個或多個元素,並返回添加新元素後的數組長度

var arr = [ ‘c‘, ‘d‘ ];
arr.unshift(‘a‘, ‘b‘) // 4
arr // [ ‘a‘, ‘b‘, ‘c‘, ‘d‘ ]

7、slice()和splice()

slice方法用於提取原數組的一部分,返回一個新數組,原數組不變。

// 格式
arr.slice(start_index, upto_index);

// 用法
var a = [‘a‘, ‘b‘, ‘c‘];

a.slice(0) // ["a", "b", "c"]
a.slice(1) // ["b", "c"]
a.slice(1, 2) // ["b"]
a.slice() // ["a", "b", "c"]

///如果slice方法的參數是負數,則表示倒數計算的位置。
var a = [‘a‘, ‘b‘, ‘c‘];
a.slice(-2) // ["b", "c"]
a.slice(-2, -1) // ["b"]

splice方法用於刪除原數組的一部分成員,並可以在被刪除的位置添加入新的數組成員,返回值是被刪除的元素。

splice的第一個參數是刪除的起始位置,第二個參數是被刪除的元素個數。如果後面還有更多的參數,則表示這些就是要被插入數組的新元素。

var a = [‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘, ‘f‘];
a.splice(4, 2, 1, 2) // ["e", "f"]//從e開始刪除2個元素,再插入後面的參數
a // ["a", "b", "c", "d", 1, 2]

///起始位置如果是負數,就表示從倒數位置開始刪除。
var a = [‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘, ‘f‘];
a.splice(-4, 2) // ["c", "d"]

///常見用法,第二個參數給0,在指定位置插入新元素
var a = [1, 1, 1];
a.splice(1, 0, 2) // []
a // [1, 2, 1, 1]  

8、reverse()和sort(),之所以兩個一起說,是因為二者都是封裝了一個常用的遍歷算法

reverse方法用於顛倒數組中元素的順序,返回改變後的數組。

sort方法對數組成員進行排序,默認是按照字典順序排序。數值會被先轉成字符串,再按照字典順序進行比較

sort方法可以傳入一個函數作為參數,表示按照自定義方法進行排序  

[
  { name: "張三", age: 30 },
  { name: "李四", age: 24 },
  { name: "王五", age: 28  }
].sort(function (o1, o2) {
  return o1.age - o2.age;//a>b則調換位置,實現從小到大的排序
})
// [
//   { name: "李四", age: 24 },
//   { name: "王五", age: 28  },
//   { name: "張三", age: 30 }
// ]

  


Js日常筆記之數組