Object类型 和 Array类型 的创建方法
1)Array() 和 Object() 不能构造函数。
object对象
传统创建对象:
var box = new Object();
box.name = '张浩';
box.age = 21;
box.fun = function(){
return 'run le';
};
字面量创建对象:
var box = {
name: '张浩',
age : 21,
fun : function(){
return 'run le';
}
};
alert(box.fun());
另一种创建对象:
var box = new Object({
name : '张浩',
age : 21,
fun : function(){ //要打印方法,要加圆括号。
return 'run le';
},
});
alert(box.fun());
alert(box);
Array数组
传统创建数组:
var box = new Array();
box[0] = '张浩' ;
box[1] = 21;
alert(box[0]);
字面量创建数组:
var box = [
12,
'abc',
Array[2]=[1,2],
function(){
return 10+10;
}
]
alert(box[3]());
另一种创建数组:
var box = new Array([
'张浩'
]);
alert(box[0]);
下标法:
var box = new Array();
box['name']='张浩';
alert(box['name']);
数组的api
1.添加
push():建一个或多个元素添加到数组的末尾,并返回length; unshift():将一个或多个元素添加带数组的开头
2.删除
pop():删除数组中的最后一个元素,特点:改变了原数组,参数:没有参数。
shift():删除数组中的第一个元素,返回值:返回删除的那个元素的值。
3
concat():用于合并两个或多个数组.特点:不改变原数组,返回拼接后的元素。
4
slice(参数1,参数2):截取数组,从参数1开始,截到参数2,但不包含2 如果只给了一个数组,那么这个参数就是开始截取的起始下标
如果参数是负数,通俗的说就是倒着数,截取下标为arr.length+负参数 如果不给参数,就是截取全部,相当于赋值这个数组
5
splice()
删除——可以删除任意数量的项,只需要指定2个参数:要删除的第一项的位置和要删除项的项数。
例如,splice(0,2)会删除数组中的前两项。
插入——可以向指定位置插入任意数量的项,只需要提供3个参数:骑士位置、0(要删除的项数)和要插入的项。
如果要插入多个项,可以再传入第四、第五,一直任意多个项。
例如,splice(2,1,”red”,”green”)会删除当前数组位置2的项,然后再从位置2开始插入字符串“red”和”green”。
替换——可以指向指定位置插入任意数量的项,且同时删除任意数量的项,只需要指定3个指定参数:起始位置、要删除的项数和要插入的任意数量项。
插入的像是不必与删除的项数相等。例如,splice(2,2,”red”,”green”)会删除当前数组位置2的项,然后再从位置2开始插入字符串“red”和“green”。
splice()方法始终都会返回一个数组,该数组中包含从元素数组中删除的项(如果没有删除任何项,则返回一个空数组)。
例字:
<script>
var colors = ["red", "green", "blue"];
var removed = colors.splice(0,1); //删除第一项
alert(colors); //green,blue
alert(removed); //red,返回数组中值包含一项
removed = colors.splice(1, 0, "yellow", "orange"); //从位置1开始插入两项
alert(colors); //green,yellow,organge,blue
alert(removed); //返回的是一个空数组
removed = colors.splice(1, 1, "red", "purple"); //插入两项,删除一项
alert(colors); //green,red,purple,orange,blue
alert(remove); //yellow, 返回的数组中只包含一项
</script>
6.把数组转换成字符串:
join()使用指定的符号吧各个数组元素连接成字符串
tostring()作用和不传参数时的join一样,默认使用逗号隔开。
7
fill()方法的作用是:使用一个固定值来替换数组中的元素。该固定值可以是字母、数字、字符串、数组等等。fill()方法还有两个可选参数,表示填充的起始位置和结束位置。
例子:
var arr3 = [12,23,34,45,56];
arr3.fill(123);
console.log(arr3) // [123,123,123,123,123]
在我门学习数组中都会面临两个问题:
1.冒泡
JS冒泡排序
原理:
依次比较相邻的两个值,如果后面的比前面的小,则将小的元素排到前面。依照这个规则进行多次并且递减的迭代,直到顺序正确。
var examp=[8,94,15,88,55,76,21,39];
function sortarr(arr){
for(i=0;i<arr.length-1;i++){
for(j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
var temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
return arr;
}
sortarr(examp);
console.log(examp);
解析
两个循环
当i=0的时候,里面的循环完整执行,从j=0执行到j=6,这也就是第一遍排序,结果是将最大的数排到了最后,这一遍循环结束后的结果应该是[8,15,88,55,76,21,39,94]
当i=1的时候,里面的循环再次完整执行,由于最大的数已经在最后了,没有必要去比较数组的最后两项,这也是j<arr.length-1-i的巧妙之处,结果是[8,15,55,76,21,39,88,94]
说到这里,规律就清楚了,每次将剩下数组里面最大的一个数排到最后面,当第一个循环执行到最后的时候,也就是i=6,此时,j=0,只需要比较数组的第一和第二项,比较完毕,返回。
2.去重:
思路:
创建一个新的数组存放结果和创建一个空对象
for循环时,每次取出一个元素与对象进行对比,如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,并赋值为1,存入到第2步建立的对象中。
说明:至于如何对比,就是每次从原数组中取出一个元素,然后到对象中去访问这个属性,如果能访问到值,则说明重复。
Array.prototype.unique3 = function() {
var res = [];
var json = {};
for (var i = 0; i < this.length; i++) {
if (!json[this[i]]) {
res.push(this[i]);
json[this[i]] = 1;
}
}
return res;
};
var arr = [112, 112, 34, '你好', 112, 112, 34, '你好', 'str', 'str1'];
console.log(arr.unique3());
数组去重有很多种,这种只是利用了函数的表达式去解决。