运行计算


上次更新时间:8/28/2020, 5:08:00 PM 0

# this 指向有关

# 题1

var o = {
    a: 10,
    b: {
        a: 12,
        fn: function(){
            console.log(this.a);
            console.log(this);
        }
    }
}
var j = o.b.fn;
j(); 
1
2
3
4
5
6
7
8
9
10
11
12

# 题2

var length = 10;
function fn(){
	console.log(this.length);
}
var obj = {
	length:5,
	method: function(fn){
		fn();
		arguments[0]();
	}
}
obj.method(fn,1);
1
2
3
4
5
6
7
8
9
10
11
12

# 题3

var name = "window";  
var object = {
	name : "object",         
	getNameFunc : function(){
		return function(){
			console.log(this.name);
		};
	}
};
object.getNameFunc()();
1
2
3
4
5
6
7
8
9
10

# 题4

var btn = {
	name: "点我",
	click: function() {
		setTimeout(() => {
			console.log(this)
		}, 1000);
	},
	show: () => {
		console.log(this);
	},
	hide: function() {
		return () => {
			console.log(this)
		}
	}
}

btn.show();
btn.hide()();

var aa = btn.hide(); 
aa();

var bb = btn.hide
bb()();

btn.click();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

#

1.完成函数 flatten,接受数组作为参数,数组元素包含整数或数组,函数返回扁平化后的数组

function flatten(arr) {
  // TODO
    var _arr = [];
			var eachArr = function(ars){
				ars.forEach(v=>{
					if (v.length) {
						eachArr(v);
					} else{
						_arr.push(v);
					}
				});
			}
			eachArr(arr);
			return _arr;
}
console.log(flatten([1, [2, [3, 4], 5], 6])); // [1, 2, 3, 4, 5, 6]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

2.实现一个格式化数字的函数 addComma,给数字添加千位分隔符

function addComma(num) {
  // TODO
  num = num.toString().split(".");
		    var arr=num[0].split("").reverse();
		    var res=[];
		    for(var i=0,len=arr.length;i<len;i++){
		      if(i%3===0&&i!==0){
		         res.push(",");
		      }
		      res.push(arr[i]);
		    }
		    res.reverse();
		    if(num[1]){  // 如果有小数的话添加小数部分
		      res=res.join("").concat("."+num[1]);
		    } else{
		      res=res.join("");
		    }
		    return res;
}

expect(addComma(1234)).toBe('1,234');
// 你还会添加哪些测试用例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

3.阅读下面的代码,你觉得有什么问题,怎么解决?

$('.time-tab').on('click', (e) => {
  // 获得用户点击的时间参数,如 today/yesterday
  const time = $(e.target).data('time')
  $.ajax({
    url: 'http://api.example.com/GetDataByTime',
    data: { time },
    onSuccess: (result) => {
      // 服务器返回结果后渲染在页面上
      render(result);
    }
  });
});

onSuccess 改为 success

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

4.实现一个解析url参数的函数

function parseUrl(urlStr) {
  // TODO
  var params_arr = urlStr.split('?')[1].split('&');
			var resURL_OBJ = {};
			params_arr.forEach(v=>{
				var _key = v.split('=')[0];
				var _value = v.split('=')[1];
				resURL_OBJ[_key] = _value;
			})
			return resURL_OBJ;
}

parseUrl('https://cloud.tencent.com?a=1&b=2&c=3');
// 返回 {a: 1, b: 2, c: 3}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

5.有一个扁平的数组描述了一系列的地理信息,类似于

var locationList = [
    { id: 0, name: "中国" },
    { id: 1, pid: 0, name: "广东省" },
    { id: 2, pid: 1, name: "深圳市" },
    { id: 3, pid: 1, name: "广州市" },
    ...
]

1
2
3
4
5
6
7
8

其中每个节点的 pid 指向了它所属上级地区。现在要求你把这个数组转换成树状结构:

var locationTree = buildLocationTree(locationList);
console.log(locationTree);

function buildLocationTree(locationList) {
  // 请实现
		  var result = []
		  // 检测
		  if(!Array.isArray(locationList)) {
		      return result
		  }
		  var mapObj = {};
		  locationList.forEach(item => {
		      mapObj[item.id] = item;
		  });
		  locationList.forEach(item => {
		      var parent = mapObj[item.pid];
		      if(parent) {
		          (parent.subLocations || (parent.subLocations = [])).push(item);
		      } else {
		          result.push(item);
		      }
		  });
		  return {
		  	root: result[0]
		  };
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

其中 locationTree 的结构应该如下:

{
    root: {
        id: 0,
        name: '中国',
        subLocations: [
            {
                id: 1,
                pid: 0,
                name: '广东省',
                subLocations: [
                    { id: 2, pid: 1, name: "深圳市" },
                    { id: 3, pid: 1, name: "广州市" },
                    // ...
                ]
            },
            // ...
        ]
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

TS 类型:

interface LocationTree {
    root: LocationNode;
}
interface LocationNode {
    id: number;
    pid?: number; // 问号表示可选属性
    name: string;
    subLocations?: LocationNode[];
}

1
2
3
4
5
6
7
8
9
10

请实现 buildLocationTree()

上次更新时间: 8/28/2020, 5:08:00 PM