1.去除一个数组里面重复的元素
推荐方法1
(1)创建一个新的数组copy,存放去重后的数组;
(2)创建一个空对象json,作为中间件;
(3)遍历原数组arr,每次取出一个元素,访问这个对象json是否存在这个属性,如果有的话就说明重复了,如果没有的话,把这个元素放到结果数组copy中,同时把这个元素作为对象的属性,赋值为1,方便后续元素对比。
var arr = [1,1,22,2,22,22,1,3];
var copy = [];
var json = {};
for (var i = 0; i < arr.length; i++) {
if (!json[arr[i]]) {
copy.push(arr[i]);
json[arr[i]] = 1;
}
}
console.log(copy); // [1, 22, 2, 3]
推荐方法2
Array.indexOf()方法返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1。
(1)创建一个空数组;
(2)遍历原数组的元素,如果在结果数组中可以找到该元素的索引,说明已存在;如果没有,则把该元素放进数组中。
var arr1 = [1,2,2,2,3,3,3,4,5,6];
var arr2 = [];
for(var i = 0, len = arr1.length;i<len;i++){
if(arr2.indexOf(arr1[i])<0) {
arr2.push(arr1[i]);
}
}
console.log(arr2);
运行结果:
[1, 2, 3, 4, 5, 6]
2.在JavaScript中什么是伪数组,怎么将伪数组转化为标准数组
伪数组(类数组):无法直接调用数组方法,也无法使用length属性实现什么特殊的行为,但是!可以使用真正数组遍历的方法(for循环配合数组下标)来遍历它们。说的浅显一些,就是:存在着length属性,可以通过数组下标的方式进行每个元素的访问,但是不能够使用push等数组的方法。
常见的伪数组:
arguments参数:arguments是一个对象,而非一个数组。
调用document.getElementsByTagName、getElementsByClassName等各类获取元素的方法。这些方法返回的是一个NodeList(节点列表),也并不是一个数组。
将伪数组转换为数组
可以使用Array.prototype.slice.call(fakeArray)将数组转化为真正的Array对象。
为何能够使用slice实现转换呢?
slice( )方法,是基于当前数组中的一个或多个项,创建一个新数组,并返回新数组。
concat( )方法,是基于当前数组中的所有项创建一个新数组,返回新数组。
3.统计字符串中字母个数或统计最多字母数
var str = 'aaaabbbcccccddfghhh';
var obj = {};
for(var i = 0; i < str.length; i++) {
var v = str.charAt(i);
if(obj[v] && obj[v].value == v) {
obj[v].count = ++obj[v].count;
}else {
obj[v] = {};
obj[v].count = 1;
obj[v].value = v;
}
}
for(key in obj) {
console.log(obj[key].value + '=' + obj[key].count + '');
}
运行结果:
a=4
b=3
c=5
d=2
f=1
g=1
h=3