大厂面试题

139 阅读2分钟

拼多多

合并两个对象

concat、for 循环、扩展运算法、push.apply 这些方法都可以

1、concat

     concat() 方法用于连接两个或多个数组。

    该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。

var a = [1,2,3];
console.log(a.concat(4,5)); // [1, 2, 3, 4, 5]

2、for 循环 -- for 循环push到一个数组

3、扩展运算法

var a = [1,2,3];
var b = [4,5,6]; 
console.log([...a, ...b]); // [1, 2, 3, 1, 2, 3]

4、push.apply

       合并数组是把后一个数组的值依次push进前一个数组,使前一个数组发生改变,并且只能两个数组之间发生合并。

var arr1 = [1,2,3,4]; 
var arr2 = [4,5,6,7,8]; 
arr1.push.apply(arr1,arr2)
console.log(arr1) //[1, 2, 3, 4, 4, 5, 6, 7, 8]


合并两个对象

Object.assign、扩展运算法、手写深浅拷贝 都可以

   

interface 和 type 的区别

在ts中,定义类型由两种方式:接口(interface)和类型别名(type alias)
interface只能定义对象类型,type声明的方式可以定义组合类型,交叉类型和原始类型
如果用type alias 声明的方式,会导致一些功能的缺失

  1. interface方式可以实现接口的extends/implements,而type 不行
  2. interface可以实现接口的merge,但是type不行


最后附赠一道前端面试题(腾讯):数组扁平化、去重、排序

关于 Array 的属性、方法这里不再做介绍,详看 MDN Array

面试题:

已知如下数组:var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];

编写一个程序将数组扁平化去并除其中重复部分数据,最终得到一个升序且不重复的数组

答案:

var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10]
// 扁平化
let flatArr = arr.flat(4)
// 去重
let disArr = Array.from(new Set(flatArr))
// 排序
let result = disArr.sort(function(a, b) {
    return a-b
})
console.log(result)
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]