1:实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number、String、Object、Array、Boolean)进行值复制。

function clone(Obj) {

var buf;

if (Obj instanceof Array) {

    buf = [];  //创建一个空的数组

    buf=buf.concat(obj)//连接数组

    return buf;

}else if (Obj instanceof Object){

buf = {};                   //创建一个空对象

for (var k in Obj) {           //为这个对象添加新的属性

buf[k] = clone(Obj[k]);

}

return buf;

}else{                         //普通变量直接赋值

return Obj;

}

}

ps:该题的思路是判断数据类型,需要注意:基本类型复制的是副本,引用类型复制的是地址。

var person1= new Object();
person1.name = "张三"; //person1指向了栈内存的空间地址
var person2 = person1; //person2获得了person1的指向地址
person2.name = "李四";//因为他们都指向同一个object,同一个name,不管修改谁,大家都修改了
console.log(person1.name+'\n'+person2.name)

2:js数组去重

方法一:

var arr = [1,6,3,9,4,9,3,8,2];

var obj = {},newArr = [];

function Repeat(){

for(var i=0,j=arr.length;i<j;i++){

if(!obj[arr[i]]){

newArr.push(arr[i]);

obj[arr[i]] = arr[i];

}

}

}

Repeat();

newArr//打印新数组

该题思路是声明一个空数组和一个空对象,循环判断,让对象的属性和值都等于数组的项数,当对象中没有这个属性时,为新数组添加元素。

当然还有更简便的做法是,是使用indexOf()方法,该方法接受一个参数,返回该参数在数组中第一次出现的位置。如果没有则返回-1;那么上述函数可以改写成这样:

var arr = [1,6,3,9,4,9,3,8,2];

var newArr = [];

function Repeat(){

for(var i=0,j=arr.length;i<j;i++){

if(newArr.indexOf(arr[i])=="-1"){//如果newArr里没有arr[i],则添加新元素。

newArr.push(arr[i]);

}

}

  return newArr;

}

Repeat();

newArr//打印新数组

3:数组排序。

js数组排序原生有sort();可以实现数组排序。在默认情况下,sort()方法按升序排列数组项,如果该方法没有参数按照字符编码的顺序进行排序。

var values = [0, 1, 5, 10, 15];
values.sort();
alert(values); //0,1,10,15,5

不用说,这种排序方式在很多情况下都不是最佳方案。

因此sort()方法可以接收一个比较函数作为参数,以便我们指定哪个值位于哪个值的前面。比较函数接收两个参数,

如果第一个参数应该位于第二个之前则返回一个负数,如果两个参数相等,则返回0,如果第一个参数应该位于第二个之后则返回一个正数。以下就是一个简单的比较函数:

function compare(value1, value2) {
  if (value1 < value2) {
        return -1;
   } else if (value1 > value2) {
    return 1;
   } else {

    return 0;
 }

}

var values = [0, 1, 5, 10, 15];
values.sort(compare);
alert(values); // 15,10,5,1,0

这个比较函数可以适用于大多数数据类型。当然,也可以通过比较函数产生降序排序的结果,只要交换比较函数返回的值即可。

如果用原生的方法实现,那么就要用到冒泡排序,该方法思路是数组的前一项和后一项比较,如果前一项大于后一项,那么交换位置。代码如下:

var arr = [0, 6, 8, 6, 4, 3, 85, 5];

for (var i = 0; i < arr.length - 1; i++) {

for (var j = 0; j < arr.length - 1; j++) {

if (arr[j] > arr[j + 1]) {

var t = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = t;

}

}

}

该段代码实现了升排序,如果实现降序,改变比较符号即可。

4:生成16进制随机颜色。

function randomColor(){

var arrHex=["0","2","3","4","5","6","7","8","9","a","b","c","d"],

strHex="#",

index;

for(var i=0;i<6;i++){

index=Math.round(Math.random()*12+0);

strHex+=arrHex[index];

}

return strHex;

}

randomColor();

关键代码:Math.round(Math.random()*12+0);

Math.floor()执行向下舍入,即它总是将数值向下舍入为最接近的整数
Math.random()方法返回大于等于0 小于1 的一个随机数。
对于某些场景来说,这个方法非常实用,因为可以利用它来随机显示一些名人名言和新闻事件。套用下面的公式,就可以利用Math.random()从某个整数范围内随机选择一个值。
公式: 值 = Math.floor(Math.random() * 可能值的总数 + 第一个可能的值);

举例来说,如果你想选择一个1到10 之间的数值,可以像下面这样编写代码:

var num = Math.floor(Math.random() * 10 + 1);

由于数组下标从0开始,那么就有Math.round(Math.random()*12+0);从中选取随机字符串拼成颜色值。

5:一个字符串中出现次数最多的字符,并统计次数?

var str = 'asdfssaaasasasasaa';

var json = {};//存储出现所有字符和个数

for (var i = 0; i < str.length; i++) {

if(!json[str[i]]){ //如果对象没有这个,赋值为1

json[str[i]] = 1

}else{//如果有自加1

json[str[i]]++

}

}

//上述代码是为了让字符串每一字符。如果存在那么每次迭代自加1,如果没有,则将数组项数作为对象属性,值为1;

var max = 0;//次数

var index = "";//字符串

for(var s in json){

  if (json[s] > max){

  max = json[s];

    index = s;

  }

}

console.log(max,index)

6:把URL参数解析为一个对象?

function parseQueryString(url) {

  var obj = {};

  if(url.indexOf('?')==-1){

    return obj;

  }

  var a = url.split('?');
  var b = a[1].split('&');
  for (var i = 0,length = b.length; i < length; i++) {
    var c = b[i].split('=');
    obj[c[0]] = c[1];
  }
  return obj;
}

var url = 'http://witmax.cn/index.php?key0=0&key1=1&key2=2';
var obj = parseQueryString(url);
console.log(obj );

split() 方法用于把一个字符串分割成字符串数组。该方法接受一个参数,从该参数指定的地方分割。

indexOf()方法,该方法接受一个参数,返回该参数在字符串中第一次出现的位置。如果没有则返回-1;

该题思路是,先使用indexOf();判断url是否有参数,如果没有则返回一个空对象;

如果有,则将参数和url分开。得到a[1]即为参数;再调用a[1].split('&');将每个参数与值存放数组里面。循环迭代,使用b[i].split('=');将b数组每一项分隔,

数组每一项都是:c[0]为属性,c[1]为值;

依次为obj对象添加属性,最后得到的即为想要结果。

最新文章

  1. plain framework 商业版 开发总结1 updated
  2. throttle和debounce简单实现
  3. VS2013编译python源码
  4. Leetcode: Repeated Substring Pattern
  5. Karma 4 - Karma 集成 Webpack 进行单元测试
  6. 创建,增加,删除mysql表分区
  7. Web.Config文件中使用configSource
  8. C语言break语句
  9. [转]ASP.NET MVC 入门2、项目的目录结构与核心的DLL
  10. HBase Java API入门
  11. homebrew介绍
  12. Debian 桌面美化
  13. CCI_chapter 1
  14. ThinkPhp学习10
  15. HDU2639[背包第K大]
  16. C++Builder String 转 char* (转)
  17. Django App(四) Submit a form
  18. 原生js简单调用百度翻译API实现的翻译工具
  19. 有两个表A和B,均有key和value两个字段,如果B的key在A中也有,就把B的value替换为A中对应的value
  20. Linux基础学习(一)__后台运行Python文件

热门文章

  1. IOS手势识别,捏合,旋转,轻扫等
  2. 远程开户系统开放API接口
  3. SRM 592 DIV2 报告
  4. 【bug】java.lang.NoSuchMethodError: android.widget.TextView.setBackground
  5. easyui 使用随笔
  6. iOS 之 内嵌网页
  7. Python3基础 使用clear() 清空一个字典
  8. Spring boot+CXF开发WebService
  9. iOS 引导页
  10. 关于ExtJS必输框,多选项