美文网首页
JavaScript常见算法集合

JavaScript常见算法集合

作者: wdapp | 来源:发表于2020-02-04 18:18 被阅读0次

冒泡排序法

var arrays = [81, 23, 46, 11, 56, 69, 57, 78, 99, 21, 23];
for (var i = 0; i < arrays.length - 1; i++) {
  for (var j = 0; j < arrays.length - 1 - i; j++) {
    if (arrays[j] > arrays[j + 1]) {
      var t = arrays[j + 1];
      arrays[j + 1] = arrays[j];
      arrays[j] = t;
    }
  }
}

选择排序法

var arrays = [81, 23, 46, 11, 56, 69, 57, 78, 99, 21, 23];
//选择排序法
for (var i = 0; i < arrays.length - 1; i++) {
  for (var j = i + 1; j < arrays.length; j++) {
    if (arrays[i] > arrays[j]) {
      var t = arrays[i];
      arrays[i] = arrays[j];
      arrays[j] = t;
    }
  }
}
console.log(arrays);

函数柯里化

// 函数柯里化:利用返回函数的方式,将多个参数进行分解,单一参数。

// 普通函数
function add(x, y) {
  return x + y;
}

// 函数柯里化
function add(x) {
  return function(y) {
    return x + y;
  };
}

console.log(add(1)(2))
// 函数柯里化封装
function add(x, y) {
  return x + y;
}

function curried(fn, ...arg1) {
  return function(...arg2) {
    return fn(...arg1, ...arg2);
  };
}

var increment = curried(add, 1);
console.log(increment(2));

// 函数柯里化更适合函数式编程方法

new 实现原理

function myFun() {

}

var f = new myFun();

console.log(f instanceof myFun);
console.log(_instanceof(f, myFun));
var s = "str"
console.log(_instanceof(s, String));
console.log(s instanceof String);

function _instanceof(left, right) {
  var left = left.__proto__;
  var prototype = right.prototype;
  while (true) {
    if (left == null) {
      return false;
    }
    if (left == prototype) {
      return true;
    }
    left = left.__proto__;
  }
}

数组去重

var arr = [2,5,3,6,2,4,5,8,3]
var obj = {}
for (var i = 0; i < arr.length; i++) {
    if(!obj[arr[i]]){
      obj[arr[i]] = 1
    }
}
console.log(obj)

斐波那契数列

function fibonacci(n) {
  return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);
}
console.log(fibonacci(5)) // 1 1 2 3 5

JavaScript深拷贝

var obj1 = {
  o: {
    name: "hello"
  },
  arr: [1, 2, {
    pass: 333
  }],
  str: "world"
};

function isType(target) {
  return Object.prototype.toString.call(target).slice(8, -1);
}

function deepCopy(target) {
  var type = isType(target);
  var reslut;
  if (type === "Array") {
    reslut = [];
  } else if (type === "Object") {
    reslut = {};
  } else {
    return target
  }
  for (var key in target) {
    var value = target[key];
    if (isType(value) === "Object" || isType(value) === "Array") {
      reslut[key] = deepCopy(value);
    } else {
      reslut[key] = value;
    }
  }
  return reslut;
}

var obj2 = deepCopy(obj1);

obj2.o.name = "hello x";
obj2.arr[0] = 11;
obj2.arr.push(4);
obj2.arr[2].pass = 555;
obj2.str = "world x";

console.log("new obj1", obj1);
console.log("new obj2", obj2);

统计出现组多的元素

var arr = ["1", "2", "345", "3", "21", "345","4", "23", "88", "25", "2", "3", "99"];
var maxStack = {};
for (var i = 0; i < arr.length; i++) {
  var item = arr[i];
  if (!maxStack[item]) {
    maxStack[item] = 1;
  } else {
    maxStack[item] = maxStack[item] + 1;
  }
}
console.log(maxStack);

相关文章

  • JavaScript常见算法集合

    冒泡排序法 选择排序法 函数柯里化 new 实现原理 数组去重 斐波那契数列 JavaScript深拷贝 统计出现...

  • JavaScript常见算法

    1.简单排序 2.冒泡排序 思想:让当前项和后一项比较,如果当前项大于后一项,两者交换位置 3.快速排序 思想:在...

  • 常见的JavaScript算法

    前言 虽说我们很多时候前端很少有机会接触到算法。大多都交互性的操作,然而从各大公司面试来看,算法依旧是考察的一方面...

  • JavaScript常见排序算法

    排序对比 冒泡排序 设置两个变量i,j,i从0~length-1,j从0~length-i-1,进行遍历,外部循环...

  • 【爬虫知识】爬虫常见加密解密算法

    简介 本文总结了在爬虫中常见的各种加密算法、编码算法的原理、在 JavaScript 中和 Python 中的基本...

  • JavaScript 数据结构之集合

    一、 集合的介绍 几乎每一种编程语言中,都有集合结构, 常见是实现方式是哈希表,这里我们使用 JavaScript...

  • JavaScript算法集合 2018-03

    本文总结常见的算法,并用JavaScript实现 Array对象的sort()函数常用比较函数compareFun...

  • JavaScript常见排序算法整理

    咳咳 作为一名JSer,要用自己的方式表达出自己的想法。以下代码涉及到简单的ES5/ES6,过于缺乏ECMAScr...

  • 常见排序算法JavaScript实现

    排序算法稳定性 假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,...

  • 《数据结构与算法-JavaScript描述》--排序算法

    最近看了《数据结构与算法-JavaScript描述》,是一本以JavaScript来实现一些常见数据结构的书,对于...

网友评论

      本文标题:JavaScript常见算法集合

      本文链接:https://www.haomeiwen.com/subject/opcdxhtx.html