1、写一个深拷贝方法

function deepClone (origin, target) {
  var target = target || {}
  var toStr = Object.prototype.toString
  var arrType = '[object Array]'
  for (var key in origin) {
    if (origin.hasOwnProperty(key)) {
      if (typeof(origin[key]) === 'object' && origin[key] !== null) {
        if (toStr.call(origin[key]) === arrType) {
          target[key] = []
        } else {
          target[key] = {}
        }
        deepClone(origin[key], target[key])
      } else {
        target[key] = origin[key]
      }
    }
  }
  return target
}

// 要克隆的对象
Object.prototype.bbb = '原型上的属性'
var person1 = {
  name: '张三',
  age: 20,
  children: {
    car: ['马自达', '奔驰'],
    home: '别墅',
    first: {
      aaa: '123123'
    }
  }
}
// 使用
var person3 = deepClone(person1)
console.log(person3)

2、写一个数组排序的方法
升序:

var arr = [27, 49, 7, 5, 7]

arr.sort(function (a, b) {
  if (a > b) {
    return 1
  } else {
    return -1
  }
})
// 下边注释的是简写的方式
// arr.sort((a, b) => a - b)
console.log(arr) // [5, 7, 7, 27, 49]

降序:

var arr = [27, 49, 7, 5, 7]

arr.sort(function (a, b) {
  if (b > a) {
    return 1
  } else {
    return -1
  }
})
// 下边注释的是简写的方式
// arr.sort((a, b) => b - a)
console.log(arr)  // [49, 27, 7, 7, 5]

3、写一个数组随机排序方法

var arr = [1,2,3,4,5,6,7]
arr.sort((a, b) => {
  var rand = Math.random()
  if (rand - 0.5 > 0) {
    return 1
  } else {
    return -1
  }
})
console.log(arr)

原理: Math.random() 返回 0 - 1 之间的随机数,不包含 0 和 1
sort(function (a, b) {} ) sort() 方法接受一个函数作为参数,函数中有两个参数,
a 和 b , 如果 a 大于 b 的话 返回正数,b 在前边, a 在后边, 如果 a 小于 b 的话 返回 负数, a 在前边, b 在后边, 如果 a 和 b 相等 返回 0 , a 和 b 的位置不动,所以, a 等于 b 的这种情况可以忽略。只比较 a 和 b 的大小就可以了,
然后我们根据这个原理, 取一个 大于 0 小于 1 的随机数, 0 - 1 之间的中间值是 0.5 ,我们那取到的这个随机数 和 中间数 0.5 做比较,在利用上边说的原理,返回正数 或者 负数,就可以保证a 和 b 个有50% 的概率随机排序

4、参数列表 arguments 转成数组

function test () {
  console.log(arguments)
  var arr = Array.prototype.slice.call(arguments)
  console.log(arr)
}

test(1,2,3,4,5,6)

结果如下:
在这里插入图片描述
通过调用 Array.prototype.slice 方法就可以吧 arguments 转成数组

5、根据字节长度排序

var arr = ['adf阿斯蒂芬', 'ok', 'aa', '哈哈哈 阿萨', '你好oo']

// 获取字节长度函数
function getByte(str) {
  var bytes = str.length;
  for (var i = 0 ; i < str.length; i++) {
    if (str[i].charCodeAt(0) > 255) {
      bytes++;
    }
  }
  return bytes
}
// 测试 getByts() 方法
// console.log(getByte('你好'))

var newArr = arr.sort(function (a, b) {
  return getByte(a) - getByte(b)
})

console.log(newArr)
// ["ok", "aa", "你好oo", "adf阿斯蒂芬", "哈哈哈 阿萨"]

6、数组去重

var arr = [0, 0, 1, 1, 2,3,4,4,5,6]

Array.prototype.unique = function () {
  var temp = {}
  var newArr = []

  for (var i = 0; i < this.length; i++) {
    if (!temp.hasOwnProperty(this[i])) {
      temp[this[i]] = this[i]
      newArr.push(this[i])
    }
  }
  return newArr
}

console.log(arr.unique())
// [0, 1, 2, 3, 4, 5, 6]

7、字符串去重

 var str = '11133333000aaaabbbdsdfas'

 String.prototype.unique = function () {
   var temp = {}
   var newStr = ''

   for (var i = 0; i < this.length; i++) {
     if (!temp.hasOwnProperty(this[i])) {
       temp[this[i]] = this[i]
       newStr += this[i]
     }
   }
   return newStr
 }

 console.log(str.unique())  // 130abdsf

8、找出字符串中出现次数最少的字母,和第一次出现的位置

var str = 'fgsfgasdgsdfgsdfgsdgfsdwefgsahadsdfmfsa'
function test (str) {
  var temp = {}

  for (var i = 0; i < str.length; i++) {
    if (temp.hasOwnProperty(str[i])) {
      temp[str[i]]++
    } else {
      temp[str[i]] = 1
    }
  }
  // console.log(temp)
  for (var key in temp) {
    // console.log(key, temp[key])
    if (temp[key] === 1) {
      return key
    }
  }
}

console.log(test(str)) // w
console.log(str.indexOf(test(str))) // 23

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐