一,利用indexOf方法
var arr = [ 2,4,5,6,2,4,6,1,7,8,5,6 ];
var temp=[];
function cancelRepeat (arr) {
for (var i = 0; i<arr.length ; i++) {
//如果temp中没有arr[i],则把它加入到temp中
if ( temp.indexOf( arr[i] ) === -1 ) {
temp.push(arr[i]);
}
}
}
cancelRepeat( arr );
console.log(temp);
[2, 4, 5, 6, 1, 7, 8]
二,利用for循环嵌套和for循环里的if判断,然后封装成function函数, 这种效率低,但是符合大多数人的思路: 设置一个数组容器,和一个标记。把数组arr中的转移到temp数组中,如果temp中有这个元素就把标志设置为true,然后break掉。
var arr = [ 2,4,5,6,2,4,6,1,7,8,5,6 ];
var temp = [] , isRepeated ;
function cancelRepeat (arr) {
for (var i =0; i< arr.length; i++) {
isRepeated = false;
for ( var j = 0; j < temp.length; j++) {
if ( arr[i] === temp[j] ) {
isRepeated = true;
break;
}
}
if ( !isRepeated ) {
temp.push( arr[i] );
}
}
}
cancelRepeat(arr);
console.log(temp);
[2, 4, 5, 6, 1, 7, 8]
第二种方法的改进型
我们可以用一个哈希表(hashtable)的结构记录已有的元素,这样就可以避免内层循环。恰好,在Javascript中实现hashtable是极为简单的,改进如下:
var arr = [ 2,4,5,6,2,4,6,1,7,8,5,6 ];
var result = [], hash = {};
function cancelRepeat (arr) {
for (var i = 0, elem; (elem = arr[i]) != null ; i++) {
if (!hash[elem]) {
result.push(elem);
hash[elem] = true;
}
}
}
cancelRepeat(arr);
console.log(result);
[2, 4, 5, 6, 1, 7, 8]
查找字符串中出现次数最多的字符,并且统计次数
function acount (str){
// 转换为数组
let arr = str.split("")
// 定义一个容器
let temp = {}
for(let i in arr){
if(temp[arr[i]]){ // 如果temp中存在的话,就temp[arr[i]] 的值加1
temp[arr[i]] +=1
}else{ // 如果temp中存在的话,就temp[arr[i]] 的值等于1
temp[arr[i]] = 1
}
}
let num =0;
let member = "";
for(let j in temp){
if(temp[j] >= num){
num = temp[j]
member = j
}
}
console.log(`出现次数最多的是:${member},共出现${num}次`)
}
acount("xingjizhengba")
这个解决方法是有问题的,这个方法只能解决某一个出现次数最多的字符,因为如果有多个出现相同次数的字符,那么只能检查到最早出现的那个。
热门评论