数组----重点

数组

特点:

ECMAScript中的数组每个元素可以保存任何类型。
ECMAScript中数组的大小也是可以自动调整的。

Array类型

定义:数组在Javascript中是一种引用类型,通常叫做数组(Array)对象。
创建Array类型有两种方式:第一种是new运算符,第二种是字面量。数组.note

使用new关键字创建数组

var box = new Array(); //创建了一个数组
var box = new Array(10); //创建一个包含10个元素的数组
var box = new Array('东方睿智',28,'教师','盐城'); //创建一个数组并分配好了元素

使用字面量方式创建数组

var box = []; //创建一个空的数组
var box = ['东方睿智',28,'教师','盐城']; //创建包含元素的数组
var box = [1,2,]; //禁止这么做,IE会识别3个元素
var box = [,,,,,]; //同样,IE的会有识别问题

使用索引下标来读取数组的值

下标索引是从0开始的;

alert(box[2]); //获取第三个元素
box[2] = '学生'; //修改第三个元素
box[4] = '计算机编程'; //增加第五个元素
使用length属性获取数组元素量
alert(box.length) //获取元素个数
box.length = 10; //强制元素个数
box[box.length] = 'JS技术'; //通过length给数组增加一个元素

创建一个复杂一点的数组
提示:Js中的数组可以存放任意数据的类型的数据

var box = [
{     //第一个元素是一个对象
name : '东方睿智',
age : 28,
run : function () {
return 'run了';
}
},

['马云','李彦宏',new Object()],//第二个元素是数组
'江苏',  //第三个元素是字符串
25+25,  //第四个元素是数值
new Array(1,2,3)  //第五个元素是数组
];

案例:1-100之间能被3整数的数字,存到数组中

//小技巧:数组的长度刚好可以作为数组中下一个元素的索引值。

var arr2 = [];
for (var i = 1; i <= 100; i++) {
  if (i % 3 == 0) {
    arr2[arr2.length] = i;
  }
}
console.log(arr2);

案例:求一组数中的所有数的和和平均值

var arr = [10, 20, 30];
//计数器思想
var sum = 0;
for (var i = 0; i < arr.length; i++) {
sum += arr[i];
}
console.log(sum);
var avg = sum / arr.length;
console.log(avg);

案例:求一组数中的最大值和最小值,以及所在位置

//预热案例:求最大值

var arr = [-10, 20, -30, 0];
//必须使用数组中的值。(最好是第一个或者最后一个,可以少比较一次)
//   var max = 0;
var max = arr[0];
var min = arr[0];
for (var i = 1; i < arr.length; i++) {
  //遍历数组,判断数组中的每一项,如果比max大,赋值给max,否则不用管
  if (arr[i] > max) {
    max = arr[i];
  }
}
console.log(max);
//console.log("最小值:" + min);

数组中的方法

Array中的方法
方法 描述
concat() 连接两个或更多的数组,并返回结果。
join() 把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。
pop() 删除并返回数组的最后一个元素
push() 向数组的末尾添加一个或更多元素,并返回新的长度。
reverse() 颠倒数组中元素的顺序。
shift() 删除并返回数组的第一个元素
slice() 从某个已有的数组返回选定的元素
sort() 对数组的元素进行排序
splice() 删除元素,并向数组添加新元素。
toString() 把数组转换为字符串,并返回结果。
unshift() 向数组的开头添加一个或更多元素,并返回新的长度。

转换方法

对象或数组都具有toLocaleString()、toString()和valueOf()方法。其中toString()和valueOf()无论重写了谁,都会返回相同的值。数组会讲每个值进行字符串形式的拼接,以逗号隔开。

var box = ['东方睿智',28,'计算机编程']; //字面量数组
alert(box); //隐式调用了toString()
alert(box.toString()); //和valueOf()返回一致
alert(box.toLocaleString()); //返回值和上面两种一致

默认情况下,数组字符串都会以逗号隔开。如果使用join()方法,则可以使用不同的分隔符来构建这个字符串。
var box = [‘东方睿智’, 28, ‘计算机编程’];
alert(box.join(’|’)); //东方睿智|28|计算机编程

HTML模板拼接案例:

方法:js字符串拼接

push()
定义:push()方法可以接收任意数量的参数,把它们逐个添加到数组的末尾,并返回修改后数组的长度。
语法: arrObj.push(……);
pop()
定义:pop() 方法将删除 arrayObject 的最后一个元素,把数组长度减 1,并且返回它删除的元素的值。如果数组已经为空,则 pop() 不改变数组,并返回 undefined 值。
语法:arrObj.pop()

var box = ['我在', 28, '计算机编程']; //字面量声明
alert(box.push('盐城')); //数组末尾添加一个元素,并且返回长度
alert(box); //查看数组
box.pop(); //移除数组末尾元素,并返回移除的元素
alert(box); //查看元素
 Array.shift()

shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值;
语法:arrayObject.shift();
返回值:数组原来的第一个元素的值;
代码:

var box = ['我在', 28, '计算机编程'];//字面量声明
alert(box.push('盐城')); //数组末尾添加一个元素,并且返回长度
alert(box); //查看数组
alert(box.shift()); //移除数组开头元素,并返回移除的元素
alert(box); //查看数组

Array.unshift()
定义:和shift()方法的功能完全相反。unshift()方法为数组的前端添加一个元素。
返回值:返回添加后数组的长度。

var box = ['我在, 28, '计算机编程']; //字面量声明
alert(box.unshift('盐城','江苏')); //数组开头添加两个元素
alert(box); //查看数组
alert(box.pop()); //移除数组末尾元素,并返回移除的元素
alert(box); //查看数组

注解:IE浏览器对unshift()方法总是返回undefined而不是数组的新长度。

重排序方法:reverse()和 sort()方法

reverse() 逆向排序
var box = [1,2,3,4,5]; //数组
alert(box.reverse()); //逆向排序方法,返回排序后的数组
alert(box); //源数组也被逆向排序了,说明是引用

注意:会改变原数组的值

sort() 从小到大排序
var box = [4,1,7,3,9,2]; //数组
alert(box.sort()); //从小到大排序,返回排序后的数组
alert(box); //源数组也被从小到大排序了

注意:会改变原数组的值

function compare(value1, value2) { //数字排序的函数参数
if (value1 < value2) { //小于,返回负数
return -1;
} else if (value1 > value2) { //大于,返回正数
return 1;
} else { //其他,返回0
return 0;
}
}
 
var box = [0,1,5,10,15]; //验证数字字符串,和数字的区别
alert(box.sort(compare)); //传参

注解:如果要反向操作,即从大到小排序,正负颠倒即可。当然,如果要逆序用reverse()更加方便。

常用的操作方法
Array.concat()
定义:concat()方法可以基于当前数组创建一个新数组。
语法:arrayObj.concat( 元素|数组);

Array. slice(start,param2)
定义:slice(start,param2)方法可以基于当前数组获取指定区域元素并创建一个新数组。
语法:arrayObject.slice(start,end)
start:
必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。
end
可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。

Array. Splice()
定义:主要用途是向数组的中部插入元素。
语法:
arrayObject.splice(index,howmany,item1,…,itemN)
index:必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。
howmany:必需。要删除的项目数量。如果设置为 0,则不会删除项目。
item1,…itemN:可选。向数组添加的新项目。
返回值:数组(被删除的元素);

执行删除功能:

执行插入功能:

执行替换功能:

let 和 const 命令
http://es6.ruanyifeng.com/#docs/let#const-命令
基本用法let
ES6 新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。

小案例:冒泡排序
//步骤:
//1.双重for循环
//2.指定轮数和次数
//3.判断是否符合标准。如果符合标准交换位置。
//1.双重for循环。(外循环控制轮数)

var arr = [7, 6, 5, 4, 3, 2, 1];
for (var i = 0; i < arr.length - 1; i++) {
  //2.指定轮数和次数(内循环控制次数)
  for (var j = 0; j < arr.length - 1; j++) {
    //3.判断是否符合标准。如果符合标准交换位置。
    //从小到大排列顺滑,如果前面的比后面的大,那么交换位置。
    if (arr[j] > arr[j + 1]) {
      var temp = arr[j];
      arr[j] = arr[j + 1];
      arr[j + 1] = temp;
    }
  }
}
console.log(arr);

案例:冒泡的升级版
优化版冒泡排序!

var arr = [1, 22,3, 4, 5, 6, 7];
//var arr = [7, 6, 5, 4, 3, 2, 1];
console.log(arr);

//如果比较完备提前结束比较。(判断,如果本次比较没有移动任何元素,那么说明已经比较完成)

var m = 0;
var n = 0;
//1.双重for循环。(外循环控制轮数)
for (var i = 0; i < arr.length - 1; i++) {
  //开闭原则。(写在第一个for循环里,是为了,每轮比较初始化bool变量变为true。)
  var bool = true;
  console.log(111);
  //2.指定轮数和次数(内循环控制次数)
  for (var j = 0; j < arr.length - 1 - i; j++) {
    //3.判断是否符合标准。如果符合标准交换位置。
    //从小到大排列顺滑,如果前面的比后面的大,那么交换位置。
    if (arr[j] > arr[j + 1]) {
      var temp = arr[j];
      arr[j] = arr[j + 1];
      arr[j + 1] = temp;
      bool = false;
    }
    m++;
  }
  n++;
  //bool这个变量默认值为true;如果本轮比较有一对元素相互交换位置,那么也不能跳出循环。
  //但是,如果本轮比较没有任何元素相互交换位置,那么说明已经比较完成,可以跳出循环。
  if (bool) {
    break;
  }
}
console.log(arr);
console.log(m);
console.log(n);

数组去重

方法一:

var arra = [1, 2, 3, 4, 4, 1, 1, 2, 1, 1, 1];
Array.prototype.distinct = function () {
    var arr = this,
        result = [],
        i, j, len = arr.length;
    for (i = 0; i < len; i++) {
        for (j = i +1; j < len; j++) {
            if (arr[i] === arr[j]) {
                j = + +i;
            }
        }
        result.push(arr[i]);
    }
    return result;
}
var arra = [1, 2, 3, 4, 4, 1, 1, 2, 1, 1, 1];
arra.distinct(); //返回[3,4,2,1]

方法二:
双层循环,外层循环元素,内层循环时比较值
值相同时,则删去这个值
注意点:删除元素之后,需要将数组的长度也减1.

Array.prototype.distinct = function () {
    var arr = this,
        i,
        j,
        len = arr.length;
    for (i = 0; i < len; i++) {
        for (j = i + 1; j < len; j++) {
            if (arr[i] == arr[j]) {
                arr.splice(j, 1);
                len--;
                j--;
            }
        }
    }
    return arr;
};
var a = [1, 2, 3, 4, 5, 6, 5, 3, 2, 4, 56, 4, 1, 2, 1, 1, 1, 1, 1, 1, ];
var b = a.distinct();
console.log(b.toString()); //1,2,3,4,5,6,56

优点:简单易懂
缺点:占用内存高,速度慢

猜你喜欢

转载自blog.csdn.net/knowledge_bird/article/details/87900915
今日推荐