JS常见的逻辑题目操作(常见面试逻辑题)

1、将两个数组组合成一个升序数组(concat、sort)

(1)concat() 方法用于连接两个或多个数组,或者是具体的值

(2)sort() 方法用于对数组的元素进行排序,sort调用的是一个函数,函数可以传入两个变量(a,b),其返回值如下

  • 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
  • 若 a 等于 b,则返回 0。
  • 若 a 大于 b,则返回一个大于 0 的值。
var a = [1, 2, 6]
var b = [4, 2, 7]
var c = a.concat(b)
console.log(c) // [1, 2, 6, 4, 2, 7]

function aruduce (x, y) {
  return x - y
}
c.sort(aruduce) // [1, 2, 2, 4, 6, 7]

// 排序简洁版本
[1,2,3,4].sort((a, b) => a - b); // [1, 2,3,4],默认是升序
[1,2,3,4].sort((a, b) => b - a); // [4,3,2,1] 降序

2、数组去重

(1)方式1:filter + indexOf() 

var res = [1,2,3,3,4,5,5,6,6,7,7,8]
var ad = res.filter((item, index, self) => {
  return self.indexOf(item) === index
})
console.log(ad) // [1, 2, 3, 4, 5, 6, 7, 8]

(2)方式2:new Set方式

var arr = [ 'a', 'a' ,'b', 'c', 'abc']
var result = [ ...new Set(arr) ] 
console.log(result)
VM187:3 (4) ["a", "b", "c", "abc"]

(3)方式3:filter+include

// 两个数组去重
let a=[1,2,3]
let b=[4,2,1]
let c=a.filter(item => b.includes( item))
console. log(c)

(4)多个数组去重

// 多个数组去重
let a=[1,2,3]
let b=[3,4,5]
let c=[3,5,9]
let e=[]
e.push(a)
e.push(b)
e.push(c)
let newData = e. reduce((i,j)=> i.filter(item => j.includes(item))
console.log(newData) // [4]

3、求两个数组的交集

(1)indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置

var a = [1,2,3,4,5,6,7,7,7,7]
var b = [1,0,9,8,7,6]
var c = []
a.forEach((item,index) => {
  if (b.indexOf(item) !== -1) {
    c.push(item)
  }
})
console.log(c) // [1, 6, 7, 7, 7, 7]

4、求最大值最小值

(可以把this换成null,求最小值的时候把max换成min)

// 方法一
var one = [1,2,3,4,5,6,7,2,1,4]
Math.max.apply(this, one) // 7

// 方法二
var one = [1,2,3,4,5,6,7,2,1,4]
Math.max(...one)  // 7

5、数组的合并

// 方法一
var a = [1,1,2,4]
var b = [5,6,7]
b.map(item => {
  console.log(item)
  a.push(item)
})
console.log(a) // [1, 1, 2, 4, 5, 6, 7]

// 方法二
[1,2,3,4].concat([5,6]) //[1,2,3,4,5,6]

// 方法三
[...[1,2,3,4],...[4,5]] //[1,2,3,4,5,6]

6、判断是否包含指 

其中includes(),find(),findIndex()是ES6的api

// 1  includes 存在的话返回true;不包含返回false
[1,2,3].includes(4) // false

// 2  indexOf  存在的话返回索引;不存在返回-1
[1,2,3].indexOf(4) // -1

// 3  find  存在的话返回具体的值;不存在返回undefined
[1, 2, 3].find((item)=>{return item===3}) // 3

// 4  findIndex  存在的话返回对应的索引;不存在返回-1
[1, 2, 3].findIndex((item)=>{return item===3}) // 2

7、三个数组求交集

var ArrFun = function (array1,array2,array3){
  let newArr = []
  // 求交集只需要遍历一个数组就行
  array1.forEach((element)=>{
    // 找到返回数据,找不到返回undefined
    let newAr2 = array2.find(item => item === element)
    let newAr3 = array3.find(item => item === element)
    if(newAr2 && newAr3) newArr.push(element)
  })
  return newArr
}
ArrFun([1,5,3,4,2],[1,2,5,7,9],[1,3,4,5,8])  // [1,5]

8、最准确的类型的判断方法

Object.prototype.toString.call()

 借鉴作者:JavaScript数组的使用小结(详细还是去看MDN) - 掘金

借鉴作者:JS之数组的几个不low操作 - 掘金

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值