Array的总结

Array

Array的属性:

Array.length

Array的方法:

Array.of

arrary新建数组

//of新建
Array.of(7);       // [7] 
Array.of(1, 2, 3); // [1, 2, 3]
//传统新建
Array(7);          // [ , , , , , , ]
Array(1, 2, 3);    // [1, 2, 3]

Array.isArray

检验是否数组

Array.isArray([1, 2, 3]); 

Array.from

从一个类似数组(如NodeList,arguments)或可迭代对象(如map,set,string既是数组又是可迭代对象)创建一个新的数组实例。

//字符串转换
Array.from('foo');
// ["f", "o", "o"]

//map转换
var m = new Map([[1, 2], [2, 4], [4, 8]]);
Array.from(m);      //[[1,2],[2,4],[4,8]]

// 使用 map 函数转换数组元素
Array.from([1, 2, 3], x => x + x);      // [2, 4, 6]

// 生成一个数字序列
Array.from({length:5}, (v, k) => k);    // [0, 1, 2, 3, 4]

//数组去重
var arr = [1,2,1,2,2,1];
//new Set 数组去重
function unique(arr){
  return Array.from(new Set(arr));//去重复
};
console.log(unique(arr));

//es6
(function(first,...rest){
    log('first',first);//1
    log('rest',rest);//['Second,3']
})(1,'Second',3);


//es5
(function(){
    var first = arguments[0];
    var rest = Array.from(arguments).slice(1);
    log('first',first);
    log('rest',rest);
})(1,'Second',3)

Array.prototype.concat()

用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。

let arr1 = ["a", "b", "c"];
let arr2 = ["d", "e", "f"];
let arr3 = arr1.concat(arr2);
console.log(arr3);
// results in a new array 
// [ "a", "b", "c", "d", "e", "f" ]
console.log(arr1);
// ["a", "b", "c"]
console.log(arr2);
// ["d", "e", "f"]

Array.prototype.entries

返回一个新的Array Iterator对象,该对象包含数组中每个索引的键/值对。

var arr = ["a", "b", "c"];
var iterator = arr.entries();
// undefined
console.log(iterator);
// Array Iterator {}
console.log(iterator.next().value); 
// [0, "a"]
console.log(iterator.next().value); 
// [1, "b"]
console.log(iterator.next().value); 
// [2, "c"]
var arr = ["a", "b", "c"];
var iterator = arr.entries();
// undefined
for (let e of iterator) {
    console.log(e);
}
// [0, "a"] 
// [1, "b"] 
// [2, "c"]

Array.prototype.every()

every() 方法测试数组的所有元素是否通过了指定函数的测试。都通过就返回true,否则返回false

function isBigEnough(element, index, array) {
  return (element >= 10);
}
var passed = [12, 5, 8, 130, 44].every(isBigEnough);
// passed is false
passed = [12, 54, 18, 130, 44].every(isBigEnough);
// passed is true

让不支持every的浏览器支持:

if (!Array.prototype.every)
{
  Array.prototype.every = function(fun /*, thisArg */)
  {
    'use strict';
    if (this === void 0 || this === null)
      throw new TypeError();
    var t = Object(this);
    var len = t.length >>> 0;
    if (typeof fun !== 'function')
        throw new TypeError();
    var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
    for (var i = 0; i < len; i++)
    {
      if (i in t && !fun.call(thisArg, t[i], i, t))
        return false;
    }
    return true;
  };
}

Array.prototype.some()

some()方法测试数组中的某些元素是否通过由提供的函数实现的测试。

与every的区别就是或||和与&&的区别

function isBiggerThan10(element, index, array) {
  return element > 10;
}
[2, 5, 8, 1, 4].some(isBiggerThan10);  // false
[12, 5, 8, 1, 4].some(isBiggerThan10); // true

Array.prototype.fill()

数组填充

arr .fill(value(填充的值),start(开始索引,可选) ,end(结束索引))

[1, 2, 3].fill(4);               // [4, 4, 4]
[1, 2, 3].fill(4, 1);            // [1, 4, 4]
[1, 2, 3].fill(4, 1, 2);         // [1, 4, 3]
[1, 2, 3].fill(4, 1, 1);         // [1, 2, 3]
[1, 2, 3].fill(4, -3, -2);       // [4, 2, 3]
[1, 2, 3].fill(4, NaN, NaN);     // [1, 2, 3]
Array(3).fill(4);                // [4, 4, 4]
[].fill.call({ length: 3 }, 4);  // {0: 4, 1: 4, 2: 4, length: 3}
[].fill.call(new Array(100),0) // [0,0,0,0,...,0] //100项

Array.prototype.map()

//数组每个平方
function pow(x) {
    return x * x;
}
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
arr.map(pow); // [1, 4, 9, 16, 25, 36, 49, 64, 81]

Array.prototype.reduce() Array.prototype.reduceRight()

按照某种规则减少数组的数量

//求和
var arr = [1, 3, 5, 7, 9];
arr.reduce(function (x, y) {
    return x + y;
}); // 25

//传统数组求和
Array.prototype.sum = function (){
 var result = 0;
 for(var i = 0; i < this.length; i++) {
  result += this[i];
 }
 return result;
};
[1,4,7,2,10].sum(); // 24

//不传统求和,在数组极长的时候效率会指数提高
eval([1,4,7,2,10].join('+'))//24

Array .prototype .filter()

过滤不符合要求的元素,filter是不会改变远数组的,有点类似every(),但every返回的是boolean

function isBigEnough(value) {
  return value >= 10;
}

var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
// filtered is [12, 130, 44]

Array.prototype.find()

find()方法返回数组中满足提供的测试功能的第一个元素的值。否则返回undefined。

//一个求素数函数
function isPrime(element, index, array) {
  var start = 2;
  while (start <= Math.sqrt(element)) {
    if (element % start++ < 1) {
      return false;
    }
  }
  return element > 1;
}

console.log([4, 6, 8, 12].find(isPrime)); // undefined, not found
console.log([4, 5, 8, 12].find(isPrime)); // 5

Array.prototype.findIndex()

findIndex()方法返回数组中满足提供的测试功能的第一个元素的索引。否则返回-1。与find方法十分的相似。

Array.prototype.findIndex()

Array.prototype.forEach()

function logArrayElements(element, index, array) {
  console.log('a[' + index + '] = ' + element);
}

// undefined的项会被略过。
[2, 5, , 9].forEach(logArrayElements);
// a[0] = 2
// a[1] = 5
// a[3] = 9

function Counter() {
  this.sum = 0;
  this.count = 0;
}
Counter.prototype.add = function(array) {
  array.forEach(function(entry) {
    this.sum += entry;
    ++this.count;
  }, this);
  // ^---- Note
};
var obj = new Counter();
obj.add([2, 5, 9]);
obj.count
// 3 
obj.sum
// 16

Array.prototype.includes()

includes()方法确定数组是否包含某个元素,返回true或false。

[1, 2, 3].includes(2);     // true
[1, 2, 3].includes(4);     // false
[1, 2, 3].includes(3, 3);  // false
[1, 2, 3].includes(3, -1); // true
[1, 2, NaN].includes(NaN); // true

Array.prototype.indexOf()

indexOf()方法返回在数组中可以找到给定元素的第一个索引,如果不存在则返回-1。

var array = [2, 9, 9];
array.indexOf(2);     // 0
array.indexOf(7);     // -1
array.indexOf(9, 2);  // 2
array.indexOf(2, -1); // -1
array.indexOf(2, -3); // 0

Array.prototype.join()

把数组(或数组类对象)的所有元素连接到字符串中。

var a = ['Wind', 'Rain', 'Fire'];
a.join();      // 'Wind,Rain,Fire'
a.join(', ');  // 'Wind, Rain, Fire'
a.join(' + '); // 'Wind + Rain + Fire'
a.join('');    // 'WindRainFire'

Array.prototype.lastIndexOf()

Array.prototype.pop()

该pop()方法从数组中删除最后一个元素,并返回该元素。此方法更改数组的长度。

Array.prototype.push()

该push()方法将一个或多个元素添加到数组的末尾并返回数组的新长度。

Array.prototype.shift()

该shift()方法从数组中删除第一个元素并返回该元素。此方法更改数组的长度。

Array.prototype.unshift()

unshift()方法将一个或多个元素添加到数组的开头,并返回新数组的新长度。

Array.prototype.reserve()

该reverse()方法将阵列反转到位。第一个数组元素成为最后一个数组元素,最后一个数组元素成为第一个。

Array.prototype.splice()

array .splice(start,deleteCount,item1,item2,...)
//从下标start开始,删除deleteCount个元素,然后插入item1,item2...

通过删除现有元素和/或添加新元素来更改数组的内容。

Array.prototype.slice()

arr.slice(begin, end)
//begin,end可省略,默认为开始和结尾

把数组从begin到end(并不包括end)的部分浅拷贝到新的数组对象。原始数组不会被修改。

silce省略参数,可以把类数组的形式(具有length)转换到数组

function list() {
  return Array.prototype.slice.call(arguments);
}

var list1 = list(...[1,2,3,4]); // [1, 2, 3,4]

Array.prototype.sort()

sort()方法排序的数组的元素代替,并返回该数组。
参数为定义排序顺序的函数。如果省略,则根据每个字符的Unicode代码点值,根据每个元素的字符串转换对数组进行排序。

var numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {
  return a - b;
});
console.log(numbers);
// [1, 2, 3, 4, 5]


var items = [
  { name: 'Edward', value: 21 },
  { name: 'Sharpe', value: 37 },
  { name: 'And', value: 45 },
  { name: 'The', value: -12 },
  { name: 'Magnetic', value: 13 },
  { name: 'Zeros', value: 37 }
];
// sort by value
items.sort(function (a, b) {
  return a.value - b.value;
});
// sort by name
items.sort(function(a, b) {
  var nameA = a.name.toUpperCase(); // ignore upper and lowercase
  var nameB = b.name.toUpperCase(); // ignore upper and lowercase
  if (nameA < nameB) {
    return -1;
  }
  if (nameA > nameB) {
    return 1;
  }

  // names must be equal
  return 0;
});
原文地址:https://www.cnblogs.com/mydia/p/6746487.html