计算textarea中的内容的行数
    方法:匹配回车符出现的次数
    代码:

    1. stringB.value.match(/(\r|\n|\r\n)/g).length

    image.gif

    半角空格和全角空格
    参考:https://blog.csdn.net/clmmei_123/article/details/81180991
    半角:一个英文空格,正则表达式: /(^\s)/g /g 表示全部的半角,Unicode编码 32
    全角:两个英文空格,正则表达式: /(\s
    $)/g /g 表示全部的全角,Unicode编码 12288

    去掉半角空格
    用filter() 函数创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素
    思路:将字符串用split()以空格切开成数组,数组中的非空字符串用filter过滤出来重新组合成新字符串就可以了

    1. stringA.value.split(/(\s)/g).filter(function(s){
    2. return s.trim() != '';
    3. }).join('');

    image.gif

    实现一个字符串头尾去除空格的函数
    注意需要去除的空格,包括全角、半角空格
    暂时不需要学习和使用正则表达式的方式
    思路:一个for循环从前往后遍历,遇到非空字符,获取它的索引;同理,获取最后一个非空字符的索引。将前后索引中间这一段字符串截取出来就可以了。
    代码:

    1. function diyTrim(str) {
    2. var result = "";
    3. var startStringIndex,endStringIndex;
    4. // do something
    5. for(var i=0;i<str.length;i++){
    6. if(str[i] != ' ' && str[i] != ' '){
    7. startStringIndex = str.indexOf(str[i]);
    8. break;
    9. }
    10. }
    11. for(var j=str.length-1;j>=0;j--){
    12. if(str[j] != ' ' && str[j] != ' '){
    13. endStringIndex = str.lastIndexOf(str[j]);
    14. break;
    15. }
    16. }
    17. result = str.slice(startStringIndex,endStringIndex+1);
    18. return result;
    19. }

    image.gif

    去掉字符串str中,连续重复的地方
    思路:前后两个相邻的字符,在for循环中从头往后一个个遍历,每次都对比相邻是否一样,根据对比结果来判断如何根据这两个字符来保存进入新字符串。
    代码:

    1. function removeRepetition(str) {
    2. var result = "";
    3. // var newStr = diyTrim(str);
    4. var tempChar = '';
    5. // do something
    6. for(var i=1;i<str.length;i++){
    7. tempChar = '';
    8. if(i == 1){
    9. if(str[i] != str[i-1]){
    10. tempChar = str[i-1]+str[i];
    11. }else{
    12. tempChar = str[i];
    13. }
    14. result += tempChar;
    15. }
    16. if(i>1){
    17. if(str[i] != str[i-1]){
    18. tempChar = str[i];
    19. }
    20. result += tempChar;
    21. }
    22. }
    23. return result;
    24. }

    image.gif

    三元运算符用在字符串连接中时,要括号包围,否则会出错

    1. (this.gender == 'male'?'He':'She')

    image.gif

    JavaScript有个内嵌的方法[create()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create), 它允许您基于现有对象创建新的对象。缺点是比起构造函数,浏览器在更晚的时候才支持create()方法(IE9, IE8 或甚至以前相比)

    1. var person3 = Object.create(person2);
    2. console.log(person3.age);

    image.gif

    前序、中序、后序遍历对象的属性
    前序遍历、中序遍历、后序遍历的区别:该节点本身在前、中、后位置输出,这个位置就是前序、中序、后序
    有如上对象,分别实现代码下方的几个函数,满足以下需求:
    假设id和name均不会重复,根据输入name找到对应的id
    假设id和name均不会重复,根据输入id找到对应的name
    把这个对象中所有的名字以“前序遍历”的方式全部输出到console中
    把这个对象中所有的名字以“中序遍历”的方式全部输出到console中
    把这个对象中所有的名字以“后序遍历”的方式全部输出到console中

    1. var tree = {
    2. "id": 0,
    3. "name": "root",
    4. "left": {
    5. "id": 1,
    6. "name": "Simon",
    7. "left": {
    8. "id": 3,
    9. "name": "Carl",
    10. "left": {
    11. "id": 7,
    12. "name": "Lee",
    13. "left": {
    14. "id": 11,
    15. "name": "Fate"
    16. }
    17. },
    18. "right": {
    19. "id": 8,
    20. "name": "Annie",
    21. "left": {
    22. "id": 12,
    23. "name": "Saber"
    24. }
    25. }
    26. },
    27. "right": {
    28. "id": 4,
    29. "name": "Tony",
    30. "left": {
    31. "id": 9,
    32. "name": "Candy"
    33. }
    34. }
    35. },
    36. "right": {
    37. "id": 2,
    38. "name": "right",
    39. "left": {
    40. "id": 5,
    41. "name": "Carl",
    42. },
    43. "right": {
    44. "id": 6,
    45. "name": "Carl",
    46. "right": {
    47. "id": 10,
    48. "name": "Kai"
    49. }
    50. }
    51. }
    52. }

    image.gif

    假设id和name均不会重复,根据输入name找到对应的id
    思路:用递归,参数为obj节点,而不是name或id。根据obj节点递归,从left到right或者反向也都可以。
    代码:

    1. function findIdByName(name) {
    2. var id;
    3. function find(obj){
    4. if(obj !=null){
    5. if(obj.name == name){
    6. id = obj.id;
    7. }
    8. find(obj.left);
    9. find(obj.right);
    10. }
    11. }
    12. find(tree);
    13. console.log(id);
    14. }

    image.gif

    假设id和name均不会重复,根据输入id找到对应的name
    代码:

    1. function findNameById(id) {
    2. var name;
    3. function find(obj){
    4. if(obj != null){
    5. if(obj.id == id){
    6. name = obj.name;
    7. }
    8. find(obj.left);
    9. find(obj.right);
    10. }
    11. }
    12. find(tree);
    13. console.log(name);
    14. }

    image.gif
    把这个对象中所有的名字以“前序遍历”的方式全部输出到console中
    前序遍历:先输出该节点,然后输出他的左孩子,最后输出他的右孩子
    思路:根据节点递归,先打印该节点,再递归左孩子,最后是右孩子
    代码:

    1. function getListWithDLR() {
    2. function con(obj){
    3. if(obj != null){
    4. console.log(obj.name);
    5. con(obj.left);
    6. con(obj.right);
    7. }
    8. }
    9. con(tree);
    10. }

    image.gif
    把这个对象中所有的名字以“中序遍历”的方式全部输出到console中,与上面类似
    代码:

    1. function getListWithLDR() {
    2. function con(obj){
    3. if(obj != null){
    4. con(obj.left);
    5. console.log(obj.name);
    6. con(obj.right);
    7. }
    8. }
    9. con(tree);
    10. }

    image.gif
    后序遍历就不用展示了

    队列:先进先出
    插入元素的那一端是队尾,删除元素的那一端是队头
    百度IFE任务中,头和尾的方向自定义了
    栈:先进后出
    一般是从上往下压栈,上面为顶,下面为底
    百度IFE任务中,顶和底的方向自定义了

    当排序非 ASCII 字符的字符串(如包含类似 e, é, è, a, ä 等字符的字符串)。一些非英语语言的字符串需要使用 String.localeCompare。这个函数可以将函数排序到正确的顺序。

    1. var items = ['réservé', 'premier', 'cliché', 'communiqué', 'café', 'adieu'];
    2. items.sort(function (a, b) {
    3. return a.localeCompare(b);
    4. });

    image.gif

    1. var arr = [[10, 14], [16, 60], [7, 44], [26, 35], [22, 63]];

    image.gif
    将上面的二维数组,按照每个元素中第二个数从大到小的顺序进行排序输出,输出结果应该为:

    1. [[22, 63], [16, 60], [7, 44], [26, 35], [10, 14]]

    image.gif

    1. var arr = [[10, 14], [16, 60], [7, 44], [26, 35], [22, 63]];
    2. //将上面的二维数组,按照每个元素中第二个数从大到小的顺序进行排序输出,输出结果应该为
    3. //用map函数生成一个新数组:[{14,0},{60,1},{44,2},{35,3},{63,4}]
    4. var mapped = arr.map(function(el,i){
    5. //输出一个object对象,value为排序的数字的值,index为数字所在的数组在一维数组中的索引值
    6. //value:14,60,44,35,63
    7. //index:0,1,2,3,4
    8. return {value:el[1],index:i};
    9. });
    10. //比较新数组的每个对象的第一个value的值,从大到小排列,注意,sort是修改原数组
    11. mapped.sort(function(a,b){
    12. return b.value - a.value;
    13. })
    14. //以新数组mapped的从大到小的顺序的index,来取出arr数组里的项,赋给新数组result
    15. var result = mapped.map(function(ar){
    16. console.log(ar.index);
    17. return arr[ar.index];
    18. })
    19. console.log(result);

    image.gif

    将下面的对象

    1. var scoreObject = {
    2. "Tony": {
    3. "Math": 95,
    4. "English": 79,
    5. "Music": 68
    6. },
    7. "Simon": {
    8. "Math": 100,
    9. "English": 95,
    10. "Music": 98
    11. },
    12. "Annie": {
    13. "Math": 54,
    14. "English": 65,
    15. "Music": 88
    16. }
    17. }

    image.gif
    将其转为如下的二维数组:

    1. var scoreArray = [
    2. ["Tony", 95, 79, 68],
    3. ……
    4. ];

    image.gif
    这题做的不完善,先放上来:

    1. function objToArr(obj){
    2. var newArr = [];
    3. for(var name in obj){
    4. var eveArr = [];
    5. eveArr.push(name);
    6. eveArr.push(obj[name]['Math']);
    7. eveArr.push(obj[name]['English']);
    8. eveArr.push(obj[name]['Music']);
    9. newArr.push(eveArr);
    10. }
    11. console.log(newArr);
    12. }
    13. objToArr(scoreObject);

    image.gif

    有一个用来存储多级菜单数据的数组

    1. var menuArr = [
    2. [1, "Area1", -1],
    3. [2, "Area2", -1],
    4. [3, "Area1-1", 1],
    5. [4, "Area1-2", 1],
    6. [5, "Area2-1", 2],
    7. [6, "Area2-2", 2],
    8. [7, "Area1-2-3", 4],
    9. [8, "Area2-2-1", 6],
    10. ];

    image.gif
    编写一个函数,将其转为如下的对象:

    1. var menuObject = {
    2. "1": {
    3. name: "Area1",
    4. subMenu: {
    5. "3": {
    6. name: "Area1-1"
    7. },
    8. "4": {
    9. name: "Area1-2",
    10. subMenu: {
    11. "7": {
    12. name: "Area1-2-3"
    13. }
    14. }
    15. }
    16. }
    17. }
    18. ……
    19. }

    image.gif
    思路:递归,只要先实现单个值找后代,后面的就好办了。创建一个空对象。遍历数组,根据每个元素第三项的数字判断子对象对应的是哪个父对象,如果找到对应的父子对象,生成新对象的内容并赋值给空对象,同时对下级的subMenu对象递归赋值
    代码:

    1. function arrTurnObj(softNum = 0) {
    2. var newObj = new Object();
    3. for(var i in menuArr){
    4. if(menuArr[i][2] == softNum){
    5. newObj[menuArr[i][0]] = {
    6. 'name': menuArr[i][1],
    7. 'subMenu': arrTurnObj(menuArr[i][0])
    8. }
    9. }
    10. }
    11. return newObj;
    12. }
    13. console.log(arrTurnObj(-1));

    image.gif