Array 对象的一些方法

参考:阮一峰

静态方法

  • Array.isArray()
    判断参数是否为数组
var arr = [1, 2, 3];

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

实例方法

  • valueOf(),toString()
//数组的valueOf方法返回数组本身
var arr = [1, 2, 3];
arr.valueOf() // [1, 2, 3]

//数组的toString方法返回数组的字符串形式
var arr = [1, 2, 3, [4, 5, 6]];
arr.toString() // "1,2,3,4,5,6"
  • push(),pop()
//push方法用于在数组的末端添加一个或多个元素,并返回添加新元素后的数组长度
var arr = [];
arr.push(1,'a') // 2
arr // [1, 'a']
//pop方法用于删除数组的最后一个元素,并返回该元素。
arr.pop() // 'a'
arr // [1]

//“后进先出”的栈结构
  • shift(),unshift()
var a = ['a', 'b'];
// unshift方法用于在数组的第一个位置添加一个或多个元素,返回添加新元素后的数组长度
a.unshift('x'); // 4
a // ['x', 'a', 'b']

//shift方法用于删除数组的第一个元素,返回被删元素
a.shift() // 'x'
a // ['a', 'b']
  • join()
//join方法以指定参数作为分隔符,将所有数组成员连接为一个字符串返回。
var a = [1, 2, 3, 4];
a.join(' ') // '1 2 3 4'
//如果数组成员是undefined或null或空位,会被转成空字符串。

//通过call方法,用于类似数组的对象
var obj = { 0: 'a', 1: 'b', length: 2 };
Array.prototype.join.call(obj, '-') // 'a-b'
  • concat()
//用于多个数组的合并,返回一个新数组,原数组不变。
['hello'].concat(['world'])
// ["hello", "world"]

[1, 2, 3].concat(4, 5, 6)
// [1, 2, 3, 4, 5, 6]
  • reverse()
//颠倒排列数组元素,返回改变后的数组。
//注意,该方法将改变原数组。
var a = ['a', 'b', 'c'];

a.reverse() // ["c", "b", "a"]
a // ["c", "b", "a"]
  • slice()
// 提取目标数组的一部分,返回一个新数组,原数组不变。
var a = ['a', 'b', 'c'];
a.slice(1, 2) // ["b"]

// 将类似数组的对象转为真正的数组
Array.prototype.slice.call({ 0: 'a', 1: 'b', length: 2 })
// ['a', 'b']

Array.prototype.slice.call(arguments);
  • splice()
//删除原数组的一部分成员,并可以在删除的位置添加新的数组成员,返回值是被删除的元素。
//注意,该方法会改变原数组。
var a = ['a', 'b', 'c', 'd', 'e', 'f'];
a.splice(4, 2, 1, 2) // ["e", "f"]
a // ["a", "b", "c", "d", 1, 2]
  • sort()
//按照字典顺序排序,原数组将被改变
//注意:数值会被先转成字符串,再按照字典顺序进行比较
[4, 3, 2, 1].sort() // [1, 2, 3, 4]
[11, 101].sort() // [101, 11]

/*sort的参数函数本身接受两个参数,表示进行比较的两个数组成员。
如果该函数的返回值大于0,表示第一个成员排在第二个成员后面.*/
[
  { name: "张三", age: 30 },
  { name: "李四", age: 24 },
  { name: "王五", age: 28  }
].sort(function (o1, o2) {
  return o1.age - o2.age;
})
// [
//   { name: "李四", age: 24 },
//   { name: "王五", age: 28  },
//   { name: "张三", age: 30 }
// ]
  • map()
// map方法将数组的所有成员依次传入参数函数,然后把每一次的执行结果组成一个新数组返回。
// 原数组没有变化
// 三个参数:当前成员、当前位置和数组本身。
[1, 2, 3].map(function(elem, index, arr) {
  return elem * index;
});
// [0, 2, 6]

// map方法不会跳过数组中的undefined和null,但是会跳过空位
var f = function (n) { return 'a' };

[1, undefined, 2].map(f) // ["a", "a", "a"]
[1, null, 2].map(f) // ["a", "a", "a"]
[1, , 2].map(f) // ["a", , "a"]
  • forEach()
//与map方法,区别只在于不返回值
//forEach方法无法中断执行,总是会将所有成员遍历完。
  • filter()
//过滤数组成员,满足条件的成员组成一个新数组返回。
//不会改变原数组
[1, 2, 3, 4, 5].filter(function (elem, index, arr) {
  return index % 2 === 0;
});
// [1, 3, 5]
  • some(),every()
//some方法判断数组成员是否符合某种条件,返回一个布尔值
//只要有一个数组成员满足就返回true
var arr = [1, 2, 3, 4, 5];
arr.some(function (elem, index, arr) {
  return elem >= 3;
});
// true

//every方法与some的区别是所有成员的返回值都是true,整个every方法才返回true

//注意,对于空数组,some方法返回false,every方法返回true
  • reduce(),reduceRight()
//reduce方法(从左往右)和reduceRight方法(从右往左)依次处理数组的每个成员
[1, 2, 3, 4, 5].reduce(function (a, b) {
  return a + b;
}, 10); //10为a的初始值,也可不设
// 25

//四个参数:累积变量(数组的第一个成员),当前变量(第二个成员),当前位置,原数组

//小应用,找出字符长度最长的数组成员
function findLongest(entries) {
  return entries.reduce(function (longest, entry) {
    return entry.length > longest.length ? entry : longest;
  }, '');
}

findLongest(['aaa', 'bb', 'c']) // "aaa"
  • indexOf(),lastIndexOf()
//indexOf方法返回给定元素在数组中第一次出现的位置,如果没有出现则返回-1。
//第一个参数为需要搜索的元素,第二个参数是从什么位置开始搜索该元素
//不能用来搜索NaN的位置
['a', 'b', 'c'].indexOf('a', 1) // -1

猜你喜欢

转载自blog.csdn.net/ee2222/article/details/80083804