飞猪前端笔试题答案 仅跑过用例不保证健壮

// 获取最大不重复子串

function lengthOfLongestSubstring(str) {
   let left = 0
   let right = 1
   let count = str.length ? 1 : 0
   let subStr = str[0] || ""
   while (right < str.length) {
      let subTemp = str.slice(left, right)
      if (~subTemp.indexOf(str[right])) {
         left++
         continue
      } else {
         right++
         subTemp = str.slice(left, right)
         if (subStr.length < subTemp.length) {
            subStr = subTemp
            count = subTemp.length
         }
      }
   }
   return `'${subStr}':${count}`
}

/*
字符串长度 0 和 1,需要单独处理
left左移不会更新最长结果
right右移则有可能影响
*/

console.log(lengthOfLongestSubstring('')) // 返回 '':0 
console.log(lengthOfLongestSubstring('cbca')) // 返回 'bca':3 
console.log(lengthOfLongestSubstring('c')) // 返回 'c':1 
console.log(lengthOfLongestSubstring('bbbbb')) // 返回 'b':1
console.log(lengthOfLongestSubstring('abcdaccbac')) // 返回 'abcd':4

改进版

// 实现对象.获取属性 链式

function fn(obj, str) {
  let props = str.split('.')
  let val = null
  val = props.reduce((acc, item) => {
    return acc[item]
	}, obj)
  return val
}
const obj = {
  a: { 
    b: { 
      c: 'c5', 
      d: 2 
    }
  }
}
console.log(fn(obj, 'a.b.c'))

// js变量比较相等

function isValueEqual(a, b) {
	if(!isObject(a) && !Array.isArray(a)) {
    return a === b
  }
  if (a === b) {
    return true
  }
  let key1s = Object.keys(a)
  let key2s = Object.keys(b)
  if(key1s.length !== key2s.length) {
    return false
  }
  return key1s.every(item => {
    return isValueEqual(a[item], b[item])
  }) 
    
}

function isObject(obj) {
  return typeof obj === 'object' && obj !== null
}


console.log(isValueEqual('3')) // => false
console.log(isValueEqual(null, undefined)) // => false
console.log(isValueEqual(false, undefined)) // => false
console.log(isValueEqual(1, 1)) // => true
console.log(isValueEqual(1, 2)) // => false
console.log(isValueEqual(1, '1')) // => false
console.log(isValueEqual([1,2], [1,2])) // => true
console.log(isValueEqual([1, { a: 1, b: 2 }], [1, { a: 1, b: 2 }])) // => true
console.log(isValueEqual({ a: 1, b: 2 }, { a: 1, b: 2 })) // => true
console.log(isValueEqual({ a: 1, b: 2 }, { a: 1, b: 2, c: 3 })) // => false
console.log(isValueEqual({ a: 1, b: [1, 2] }, { a: 1, b: [1, 2] })) // => true
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值