如何判断一个字符串中出现次数最多的的字符和出现的次数
var str = "abadsadfscxzvafadefg";
var json = {}
//遍历字符串中每一个字符,作为key放在对象中
for(var i = 0; i < str.length; i++){
//如果没有当前字符,就添加,value值为1
if(!json[str.charAt(i)]){
json[str.charAt(i)] = 1;
}
//如果有当前字符,value值加1
else{
json[str.charAt(i)]++;
}
}
//声明一个变量来接受字符,一个变量来接受出现的次数
var string = "";
var num = 0;
//遍历json
for(var i in json){
//如果当前值大于num,就把当前值赋值给num,
if(json[i] > num){
num = json[i];
string = i;
}
}
console.log(string + num);
请写出冒泡排序及选择排序算法
冒泡:
for (var i = 0; i < arr.length; i++){
//每轮执行的次数遍历
for (var j = 0; j < arr.length - 1 - i; j++){
if (arr[j] >= arr[j + 1]){
//比较相邻两个元素,每轮都从下标为0开始,所以是j和j+1比较。比较完之后,交换位置
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
选择:
for (var i = 0; i <arr.length; i++){
//每轮的次数循环
for(var j = i + 1; j < arr.length; j++){
//比较i和j 位置元素的大小,进行位置交换。
if (arr[i] >= arr[j]) {
var temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
数组自身排序:
arr3 = [1,2,3,4,5,6];
arr3.sort(function (a, b){
//从大到小
if (a > b) {
return -1;
}
else if (a < b) {
return 1;
}
else{
return 0;
}
});
console.log(arr3);
数组去重
- 创建新的数组利用indexOf判断。
Array.prototype.repeat = function(){
var arr = [];//创建一个临时数组
for(var i = 0; i < this.length; i++){
//如果当前数组的第i已经保存进了临时数组,那么跳过,否则把当前项push到临时数组里
if(arr.indexOf(this[i]) == -1){
arr.push(this[i]);
}
}
return arr;
}
2.创建空对象判断对象中是否包含
Array.prototype.repeat = function(){
<!--声明一个空数组来存放数组元素-->
var arr = [];
var obj = {};
for(var i = 0; i < this.length; i++){
<!--利用对象判断是否存在,没有就添加到数组中-->
if(!obj[this[i]]){
arr.push(this[i]);
obj[this[i]] = 1;
}
}
return arr;
}
var arr1 = [1,2,3,4,3,4,13,41,31,43,1,2,3,4,2,32,23];
console.log(arr1.repeat());
求两个数的最大公约数和最小公倍数
有点绕,看不懂:
function maxGys(num1,num2){
var i = +num1, j = +num2, t = j;
while(j != 0){
t = i % j;
i = j;
j = t;
}
return i;
}
console.log(maxGys(15,12));
下面的方法容易理解的多:
function f(num1, num2){
i的初始值为两个数中小的那个值
for(i = Math.min(num1, num2); i > 0; i--){
if(num1 % i == 0 && num2 % i == 0){
return i;
}
}
};
console.log(f(12, 8));
最小公倍数同理:
function f(num1, num2){
for(i = Math.min(num1, num2); i > 0; i--){
if(num1 % i == 0 && num2 % i == 0){
return i;
}
}
};
console.log(f(12, 8));
输入一个数判断是不是质数
var num = prompt('请输入任意非0正整数');
if(num == 1){
console.log('1既不是质数也不是合数');
}
for(var i = 2; i <= num; i++){
if(num % i == 0){
if(num > i){
console.log(num + "不是质数");
break;
}else{
console.log(num + "是质数")
}
}
}
求出0-n之间的所有质数和
1既不是质数也不是合数
function zhishu(n){
var num = 0;
for(var i = 2; i <= n; i++){
//内层循环用来计算n除以0-n
for(var j = 2; j <= i; j++){
//如果取余都等于0了,就跳出内层循环
if(i % j == 0){
break
}
}
//判断如果跳出时的数比i小就说明不是质数,说明除了1和n还有其他能除尽的
//否则跳出时数就等于n的话,说明是是质数进行叠加的操作
if(i <= j){
num = num + i;
}
}
console.log(num)
}
zhishu(100);
输出问题
同步异步回调执行顺序
同步 ==》 异步 ==》 回调
for(var i = 0; i < 5; i++){
setTimeout(function(){ //回调最后执行
console.log("2:",i);
});
console.log("1:",i); //同步先执行for循环
}
console.log(i);
1: 0
1: 1
1: 2
1: 3
1: 4
5
2: 5
2: 5
2: 5
2: 5
2: 5
var a = 5;
fn();
function fn(){
console.log(a);
var a = 8;
console.log(a);
}
最终结果:undefined、8。
说明:当函数内没有重新声明a的时候第一个输出为全局的5。
<body ng-app="myApp">
<div ng-controller="ctrl">
<input type="text" ng-model="a" id="a"/>
</div>
</body>
var app = angular.module("myApp",[]);
app.controller("ctrl",["$scope",function($scope){
$scope.a = 1;
setTimeout(function(){
$("#a").val(2);
console.log($scope.a);
console.log($("#a").val());
},1000);
}]);
输出结果:1、2;
console.log(1 + '1');//11
console.log(1 - '1');//0
let a = 3;
console.log(window.a);//undefined
var x = 1,y = z = 0;
function add(n){
return n = n + 1;
}
y = add(x);
function add(n){
return n = n + 3;
}
z = add(x);
console.log(y);//因为上面的函数被覆盖了。而且调用提前
console.log(z);
var a = "undefined";
var b = false;
var c = "";
function test(val){
if(val){
alert(true);
}else{
alert(false);
}
}
test(a);//true
test(b);//false
test(c);//false
var price = 100;
(function fn(){
var price = price;
var doubleprice = price * 2;
var price = 200;
var halfprice = price / 2;
alert(price);//200
alert(doubleprice);//NAN
alert(halfprice);//100
})();
如何用JS实现JQ的hasClass功能
<div class="haha heihei bobo"></div>
var div = document.getElementsByClassName("haha")[0];//通过class获取元素
function hasClass(obj, cls){
var obj_class = obj.className;//获取 class 内容.
var obj_class_arr = obj_class.split(/\s+/);//通过split按照空字符将cls转换成数组。/\s+/正则表达式
var x = 0;
for(x in obj_class_arr) {//通过下标遍历数组
if(obj_class_arr[x] == cls) {//判断数组中是否包含要查询的cls
return true;
}
}
return false;
}
console.log(hasClass(div,'haha'));//true
封装一个函数清除字符串前后的空格
jQ的trim();
function remove(str){
return str.replace(/(^\s*)|(\s*$)/,"");
}
console.log(remove(' dhggggg sajd '));//dhggggg sajd
<!--删除所有空格-->
str.replace(/\s/g,"");
获取一堆name名相同的div,点击弹出第几个
var arr = document.getElementsByName("hehe");
for(var i = 0; i < arr.length; i++){
arr[i].index = i;
arr[i].onclick = function(){
alert(this.index);
}
}
封装一个函数,把URL参数解析为一个对象
function parseQueryString(url){
var str = url.split("?")[1];
var items = str.split("&");
var result = {};
var arr = [];
for(var i = 0; i < items.length; i++){
arr = items[i].split("=");
result[arr[0]] = arr[1]
}
return result;
}
var obj = parseQueryString("http://www.taobao.com/index.php?key0=0&key1=1&key2=2");
console.log(obj);
封装一个函数,将字符串的每个字符都变成小写,并且用空格隔开,如果之前有空格则保留一个空格
function fn(str){
var new_str = str.toLowerCase();
var str2 = "";
for(var i of new_str){
if(i != " "){
i = i + " ";
str2 = str2 + i;
}
}
console.log(str2);//w a n g j u n w e i
}
fn("wang JUN WEI");