前段笔试(转载)

(1) 将多维数组转化成一个一位数组,例如[1,[2,3],[4,5,[6,7]]]转化成[1,2,3,4,5,6,7]

思路:先用join方法转换回字符串

[1,[2,3],[4,5,[6,7]]].join(',')  //"1,2,3,4,5,6,7"

再把字符串转换成字符串数组

[1,[2,3],[4,5,[6,7]]].join(',').split(",")//["1", "2", "3", "4", "5", "6", "7"]

把字符串数组转化为新的数组

[1,[2,3],[4,5,[6,7]]].join(',').split(',').map(function(i){return i|0 ;})
[1,[2,3],[4,5,[6,7]]].join(',').split(',').map(function(i){return +i ;})
//[1, 2, 3, 4, 5, 6, 7]

在这里来i|0相当于+i,就是把字符串转化为数字,比如

console.log(“1"|0);//1
console.log("1000"|0);//1000

注意js中一些隐式的转换

x+""相当于String(x)

+x相当于Number(x)
!!x相当于Boolean(x)

顺便来学习js中map的用法

这里的map不是“地图”的意思,而是指“映射”。[].map(); 基本用法跟forEach方法类似:

array.map(callback,[thisObject]);

callback的参数也类似:

[].map(function(value, index, array) {
    // ...
});

map方法的作用不难理解,“映射”嘛,也就是原数组被“映射”成对应新数组。下面这个例子是数值项求平方:

var data = [1, 2, 3, 4];

var arrayOfSquares = data.map(function (item) {
  return item * item;
});

alert(arrayOfSquares); // 1, 4, 9, 16

callback需要有return值,如果没有,就像下面这样:

var data = [1, 2, 3, 4];
var arrayOfSquares = data.map(function() {});

arrayOfSquares.forEach(console.log);

结果如下图,可以看到,数组所有项都被映射成了undefined

在实际使用的时候,我们可以利用map方法方便获得对象数组中的特定属性值们。例如下面这个例子(之后的兼容demo也是该例子):

var users = [
  {name: "张含韵", "email": "zhang@email.com"},
  {name: "江一燕",   "email": "jiang@email.com"},
  {name: "李小璐",  "email": "li@email.com"}
];

var emails = users.map(function (user) { return user.email; });

console.log(emails.join(", ")); // zhang@email.com, jiang@email.com, li@email.com

Array.prototype扩展可以让IE6-IE8浏览器也支持map方法:

if (typeof Array.prototype.map != "function") {
  Array.prototype.map = function (fn, context) {
    var arr = [];
    if (typeof fn === "function") {
      for (var k = 0, length = this.length; k < length; k++) {      
         arr.push(fn.call(context, this[k], k, this));
      }
    }
    return arr;
  };
}

 (2) 求数组的最大维数,即一共嵌套了多少层,例如[1,2,[3,[4,5,[6]],[7,[8]]]] 一共嵌套了4层,还是利用递归,主要代码在下面

var a=[1,2,[3,[4,5,[6]],[7,[8]]]];
function GetArrayDeep(arr){
    var deep=[];
    for(var i=0,length=arr.length;i<length;i++){
        if(arr[i] instanceof Array){
          deep[i]=arguments.callee(arr[i])+1;//如果是数组,维数加1,相当于下一层的维数+1
        }
      else{
        deep[i]=1;
      }
      
    }
  console.log(deep);
  return deep.sort(function(a,b){return a-b;}).pop();//从底层开始,返回每层最大的维数
 //return Math.max.apply(null,deep);
}
console.log(GetArrayDeep(a));
//

[1]
[1, 1, 2]
[1]
[1, 2]
[1, 3, 3]
[1, 1, 4]
4


 (3)查找字符串中出现最多的字符和个数?   例如:sdjksfssscfssdd  -> 字符最多的是s,出现了7次,这个主要就是利用replace函数来实现的,还可以用普通的方式

var str = "sdjksfssscfssdd";
str = str.split("").sort().join("");
var count = 0;
var val;
str.replace(/(w)1/g,function(arg0,arg1){
    if(arg0.length > count){
      count = arg0.length;
      val = arg1;
    }
});    
console.log(val+" 出现了"+count+" 次");
原文地址:https://www.cnblogs.com/yhf286/p/4885463.html