数组的复制
/*一, 怎样复制一个数组? 最简单的方法是 循环这个数组, 把每一项都添加到新的数组中.
如果有人给你出这样的题目, 那么这个回答应该不是对方想要的.
Array.slice(start, [end])
slice 方法返回一个 Array 对象,其中包含了 arrayObj 的指定部分。 (同样可用于string类型)
参数详解,
start, 从左开始0为起点(非负数).
end,可选,不填写则为数组或者字符串的长度. 正整数,期望截取的长度; 负数.从数组或者字符串末尾开始算期望去掉的长度
*/
window.onload = function () {
var source = [4, 5, 6, "ff", new Date()];
var target = source.slice(0, -3); //期望去掉后面三个元素. 得到 [4,5]
var target2 = source.slice(0, 3); //[4,5,6]
log(target.join(',')); log(target2.join(','));
source = "aabbccdd";
target = source.slice(0, -3);//期望去掉后面三个元素. 得到 aabbc
target2 = source.slice(0, 3);//aab
log(target); log(target2);
}
去掉数组重复项
//去掉重复项, 这里提供两个方法
var arr = arr2 = [1, 2, 2, 3, "aa", "aa", "BB"];
var newarr = [], tempObj = {};
for (var i = 0; i < arr.length; i++) {
if (tempObj[arr[i]])
continue;
newarr.push(arr[i]);
tempObj[arr[i]] = arr[i];
}
//使用正则表达式. 先替换掉所有当前元素, 再加上当前元素, 就可以保证当前元素只出现一次
newarr = arr.join(',')+",";
for (var i = 0; i < arr2.length; i++) {
var reg = new RegExp(arr2[i] + ",", "g");
newarr = newarr.replace(reg, "") + arr2[i] + ",";
}
log(newarr.split(','))
合并数组(去重复)
//合并数组
var arr1 = [1, 2, 3]; var arr2 = [3, 4, 5];
newarr = arr1.join(',') + ",";
for (var i = 0; i < arr2.length; i++) {
var reg = new RegExp(arr2[i] + ",", "g");
newarr = newarr.replace(reg, "") + arr2[i] + ",";
}
log(newarr.split(','))
伪数组
这里把符合以下条件的对象称为伪数组
1,具有length属性
2,按索引方式存储数据
3,不具有数组的push,pop等方法
4, 能通过Array.prototype.slice转换为真正的数组的带有length属性的对象
var earr = { 0: "a", 1: "b", 2: "c", length: 3 };
//log(earr[1]); b
for (var i = 0; i < earr.length; i++) {
//log(earr[i]); a b c
}
/*earr的表现和一个 ['a','b','c']数组一样*/
var toArray = function () {return [].slice.call(arguments);
}log(toArray(3, 5)); // 3,5
log(toArray(3, 5).constructor); //Array常见的伪数组有function的arguments, childNodes, jQuery, 等等.
//把数组转成伪数组
var arr = [1, 2, 3, "a"];
var obj = { length: 0 };
[ ].push.apply(obj, arr)
for (var i in obj) {
log(i + " " + obj[i]);
}
输出: 0 1 1 2 2 3 3 a length 4
真数组转化为伪数组:
[].push.apply(this,[]);