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

// 获取最大不重复子串

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
posted @   海胆Sur  阅读(15)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示