Array

原创 2015年11月19日 10:01:51

创建数组

// 创建一个空数组
var arr1 = new Array();
var arr2 = Array();
var arr3 = [];

// 创建一个长度为5的数组,它包含5个undefined
var arr1 = new Array(5);
var arr2 = Array(5);

// 创建一个长度为3的数组,它的包含“red”,“blue”和“green”.
var arr1 = new Array('red', 'blue', 'green');
var arr2 = Array('red', 'blue', 'green');
var arr3 = ['red', 'blue', 'green'];

数组的长度

var arr = [1, 2, 3];

arr.length = 2;

arr  // [1, 2]

arr.length = 5;

arr  // [1, 2, undefined, undefined, undefined]

数组的检测

var arr = [1, 2, 3];

// 方法1
arr instanceof Array  // true

// 方法2 ECMAScript5 推荐
Array.isArray(arr)    // true

数组的转换方法

// 数组转换时,undefined为""

var person1 = {
    toLocaleString : function () {
        return "toLocaleString1";
    },
    toString : function() {
        return "toString1";
    }
};

var person2 = {
    toLocaleString : function () {
        return "toLocaleString2";
    },
    toString : function() {
        return "toString2";
    }
};

var people = [person1, person2];

people                  // toString1,toString2
people.valueOf()        // toString1,toString2
people.toString()       // toString1,toString2
people.toLocaleString() // toLocaleString1,toLocaleString2

people.join()      // toString1,toString2
people.join('||')  // toString1||toString2

栈方法

var arr = [0];

var n = arr.push(1, 2, 3);

arr  // [0, 1, 2, 3]
n    // 4

n = arr.push(4);

arr  // [0, 1, 2, 3, 4]
n    // 5

var i = arr.pop();

arr  // [0, 1, 2, 3]
i    // 4

队列方法

var arr = [0, 1, 2, 3];

var i = arr.shift();

arr  // [1, 2, 3]
i    // 0

var n = arr.unshift(4, 5);

arr // [4, 5, 1, 2, 3]
n   // 5

数组排序

var arr = [0, 1, 3, 2, 10];

// 反转原数组顺序
var re = arr.reverse();

arr  // [10, 2, 3, 1, 0]
re   // [10, 2, 3, 1, 0]

// 按toString()排序
var so = arr.sort();

arr  // [0, 1, 10, 2, 3]
so   // [0, 1, 10, 2, 3]

// 自定义排序方法 数值由小到大排序
arr.sort(function(a, b) {
  return a<b ? -1 : 1;
});

arr  // [0, 1, 2, 3, 10]

// 对于数值类型,数值由小到大排序 推荐方法
arr.sort(function(a, b) {
  return a-b;
});

arr  // [0, 1, 2, 3, 10

操作方法

// 数组合并
var arr1 = [0, 1, 2];
var arr2 = arr1.concat(3, [4, 5], [6, 7]);

arr1  // [0, 1, 2]
arr2  // [0, 1, 2, 3, 4, 5, 6, 7]

// 数组截取
var arr1 = [0, 1, 2, 3, 4, 5];
var arr2 = arr1.slice(1);
var arr3 = arr1.slice(1, 4);
var arr4 = arr1.slice(-4, -2);

arr1  // [0, 1, 2, 3, 4, 5]
arr2  // [1, 2, 3, 4, 5]
arr3  // [1, 2, 3]
arr4  // [2, 3]

// 万能大法 splice()
var arr1 = [0, 1, 2, 3, 4, 5];
var arr2 = arr1.splice(0, 2);      // 删除

arr1  // [2, 3, 4, 5]
arr2  // [0, 1]

arr1 = [0, 1, 2, 3, 4, 5];
arr2 = arr1.splice(2, 0, 7, 8, 9); // 插入

arr1  // [0, 1, 7, 8, 9, 2, 3, 4, 5]
arr2  // []

arr1 = [0, 1, 2, 3, 4, 5];
arr2 = arr1.splice(2, 2, 7, 8, 9); // 删除并插入

arr1  // [0, 1, 7, 8, 9, 4, 5]
arr2  // [2, 3]

arr1 = [0, 1, 2, 3, 4, 5];
arr2 = arr1.splice(-2, 2, 7, 8, 9); // 删除并插入2

arr1  // [0, 1, 2, 3, 7, 8, 9]
arr2  // [4, 5]

查询元素位置

var arr = ['a', 'b', 'c', 'd', 'c', 'b', 'a'];

arr.indexOf('c')         // 2
arr.lastIndexOf('c')     // 4

arr.indexOf('c', 3)      // 4
arr.lastIndexOf('c', 3)  // 2
arr.lastIndexOf('c', -5) // 2

// 查询用的是===比较
var person = { name: "Nicholas" };

var people = [{ name: "Nicholas" }];
var morePeople = [person];

people.indexOf(person)     // -1
morePeople.indexOf(person) // 0

数组迭代方法

/* 
 * 以下每个方法都接收两个参数:
 *   1. 要在每一项上运行的函数
 *       参数包括:当前元素,当前下标,原数组
 *   2. (可选的)运行该函数的作用域对象——影响this的值
 */
var arr = [0, 1, 2, 3, 4, 5];

// 数组中任何元素都满足函数中的条件,返回true,否则返回false
var ev = arr.every(fun1);
ev  // false

// 数组中有元素满足函数中的条件,返回true,都不满足返回false
var so = arr.some(fun1);
so  // true

// 返回数组中满足函数条件的元素数组
var fi = arr.filter(fun1);
fi  // [4, 5]

// 返回数组所有元素运行函数后的结果
var ma = arr.map(fun2);
ma  // [0, 2, 4, 6, 8, 10]

// 相当于for循环,没有返回值
var fo = arr.forEach(fun2);
fo  // undefined

// 判断元素是否大于3
function fun1(item, index, array) {
  return item>3;
}

// 元素值 * 2
function fun2(item, index, array) {
  return item*2;
}

缩小方法(在我看来依旧是迭代方法~)

var arr = [0, 1, 2, 3, 4, 5];

// 从前向后迭代,返回最终结果
var re = arr.reduce(fun1);

console.log(re);
// prev=0 cur=1 index=1 arr=0,1,2,3,4,5
// prev=1 cur=2 index=2 arr=0,1,2,3,4,5
// prev=3 cur=3 index=3 arr=0,1,2,3,4,5
// prev=6 cur=4 index=4 arr=0,1,2,3,4,5
// prev=10 cur=5 index=5 arr=0,1,2,3,4,5
// 15

// 从后向前迭代,返回最终结果
var rr = arr.reduceRight(fun1);

console.log(rr);
// prev=5 cur=4 index=4 arr=0,1,2,3,4,5
// prev=9 cur=3 index=3 arr=0,1,2,3,4,5
// prev=12 cur=2 index=2 arr=0,1,2,3,4,5
// prev=14 cur=1 index=1 arr=0,1,2,3,4,5
// prev=15 cur=0 index=0 arr=0,1,2,3,4,5
// 15

// 参数(前一个值,当前值,下标,原数组)
function fun1(prev, cur, index, array) {
  console.log('prev=' + prev + ' cur=' + cur + ' index=' + index + ' arr=' + array);
  return prev+cur;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

Java Array、List、Set互相转化

Java ArrayListSet互相转化 ArrayListSet互转实例 1 ArrayList互转 2 ListSet互转 3 ArraySet互转 ArraysasList 和 Collect...
  • u014532901
  • u014532901
  • 2017年12月16日 15:23
  • 856

为什么要用boost::array

为什么要用boost::array1、boost::array 与 std::vector ( From Chapter 2. Boost.Array)As replacement for ordin...
  • mythma
  • mythma
  • 2005年06月16日 18:49
  • 5104

HDU 6197 array array array (2017沈阳网赛- 最长上升子序列)

题意: 告诉你n 个数, 问你是否去掉k 个数后, 原序列变成非严格递增序列或者非严格递减序列。  思路: 显然求一遍LIS , 倒过来在求一边LIS, 比较ans 和 k 的关系即可。 #i...
  • aozil_yang
  • aozil_yang
  • 2017年09月11日 08:38
  • 281

【C++ STL应用与实现】5: 如何使用std::array (since C++11)

本文总结了STL中的序列式容器array的用法及注意事项。array的出现代表着C++的代码更进一步“现代化”,就像std::string的出现代替了c风格字符串并且能和STL配合工作一样,array...
  • elloop
  • elloop
  • 2015年12月24日 00:52
  • 7407

Java - Array Initialization

数组:相同类型的、用一个标识符名称封装到一起的,一个对象序列or基本类型数据序列。数组定义方式:int[] a1; 编译器不允许指定上述代码中数组的大小。这就又把我们带回到有关“引用”的问题上。现在拥...
  • ForWayfarer
  • ForWayfarer
  • 2008年06月13日 11:00
  • 1294

C++11 array使用详解

C++11中的array使用详解
  • SENLINZM
  • SENLINZM
  • 2014年08月19日 15:47
  • 4522

Array of Structures vs Structure of Arrays

1. 概念 Array of structures 结果是一个array,类型是一个structure!  Structure of Arrays结果是一个struture,类型是arrays! 2....
  • dizuo
  • dizuo
  • 2013年08月14日 10:54
  • 1511

D:array array array

D:array array array 其实转换一下就变成了求最长不上升(下降)子序列 由于AiA_i...
  • lzh823046544
  • lzh823046544
  • 2017年09月10日 18:05
  • 81

关于Array和List的区别(转载)

 Array和List都属于顺序表。    Array是一段连续的存储结构int[] i=new int[3]i其实记录的是数组的首地址,而i[1]其实相当于在i的地址的基础上加上1个整数的地址偏移,...
  • starseeker7
  • starseeker7
  • 2009年03月29日 08:47
  • 14698

ValueError: Expected 2D array, got 1D array instead:

1.你也可能是这种 2.这种可能 import numpy as np import matplotlib.pyplot as plt from matplotlib import style ...
  • dongyanwen6036
  • dongyanwen6036
  • 2017年12月21日 15:47
  • 928
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Array
举报原因:
原因补充:

(最多只允许输入30个字)