//1.找出某个数字在一组数组内的存不存在 如果存在 找出他所在的索引。
function indexOf(arr,item){
var i;
if(Array.prototype.indexOf){
return arr.indexOf(item);
}else{
for(i=0;i<arr.length;i++){
if(arr[i] == item){
return i;
}
}
}

}
// console.log(indexOf([1,2,3,4,5],3));

//2.计算数组arr中所有元素的总和。
function sum(arr){
var i;
var all=0;
for(i=0;i<arr.length;i++){
all +=arr[i];
}
return all;
}

// console.log(sum([1,2,3,4]));
//3.移除数组arr中与item相等的元素 不直接修改数组arr 结果反回新的数组
function remove(arr,item){
var i;
var newarry = new Array;
for(i=0;i<arr.length;i++){
if(arr[i] !==item){
newarry.push(arr[i]);
}
}
return newarry;
cl
}
// console.log(remove([1,2,3,1,5,6],1));

//splice(index1,index2)方法, 第一个参数表示要删除的哪个 ,第二个表示删除几个.
function removeWithoutCopy(arr, item) {
for(var i=0;i<arr.length;i++){
if(arr[i] == item){
arr.splice(i,1)
i--;
}
}

return arr;
}
// console.log(removeWithoutCopy([1,2,3,2,2,2,4,5],2));
//4.把一个元素添加到一个数组内。
function append(arr,item){
var i=0;
var newArray =[];
for(i=0;i<arr.length;i++){
newArray.push(arr[i]);

}
newArray.push(item);
return newArray;
}
// console.log(append([1,2,3,4],5)); 1,2,3,4,5
//5.去掉一个数组中的最后一位元素 。
function truncate(arr) {
var lastIndex = arr.length-1;
return arr.slice(0,lastIndex);
}
//console.log(truncate([2,3,6,7,9]));
//6.在数组 arr 开头添加元素 item。

function prepend(arr,item){
return [item].concat(arr);
}
// console.log(prepend([1,2,3,4],5)); //5,1,2,3,4

//7. 删除数组arr第一个元素。

function curtail(arr){
var i = 0;
var newArray = [];
for(i=0;i<arr.length;i++){
if(arr[i] !== arr[0]){
newArray.push(arr[i]);
}
}
return newArray;
}
// console.log(curtail([1,2,3,4])); 2,3,4
//8. 合并2个数组
function concat(arr1,arr2){
return arr1.concat(arr2);
}
// console.log(concat([1,2,3],[4,5,6])); 1,2,3,4,5,6

//9.在数组 arr 的 index 处添加元素 item。
function insert(arr,item,index){
var newArr = arr.slice(0);
newArr.splice(index,0,item);
return newArr;
}
// console.log(insert([1,2,3,4],'a',2));

//10.统计数组中 某元素出现的次数.
function count(arr,item){
var index = 0;
var i =0;
for(i;i<arr.length;i++){
if(arr[i] == item){
index++;
}
}
return index;
}
// console.log(count([1,2,3,4,4,4,6],4));

//11. 找出数组 arr 中重复出现过的元素
function duplicates(arr){
//a数组用来存结果 b数组用来存arr的结果
var a=[],b=[];
var i;
for(i=0;i<arr.length;i++){
if(!b[arr[i]]){
b[arr[i]] = 1;
continue;
}
b[arr[i]]++;
}
for(i=0;i<b.length;i++){
if(b[i] > 1){
a.push(i);
}
}
return a;
}



//console.log(duplicates([1,2,2,2,2,2,4,4,5,3,4]));

//12. 求一个数组内所有元素的各个平方
function square(arr) {
var newArr =[];
var i;
for(i =0;i<arr.length;i++){
newArr.push(Math.pow(arr[i],2));
}
return newArr;
}
//console.log(square([2,3,4,5]));

//13. 查找item在一个字符串中出现的所有位置
//查找target的位置,只需要将数组arr中键值对key-value中value == target的key找出来存到新数组而已。因此,遍历arr,如果target == arr[i],i即目标值位置,则将i加入到a数组中。
function findAllOccurrences(arr, item) {
var newArr = [];
var i
for(i=0;i<arr.length;i++){
if(arr[i] == item){
newArr.push(i);
}
}
return newArr;
}
// console.log(findAllOccurrences([1,2,3,2,3,2],2));
//1、从 start 到 end(包含 start 和 end),每隔 100 毫秒 console.log 一个数字,每次数字增幅为 1
//2、返回的对象中需要包含一个 cancel 方法,用于停止定时操作
//3、第一个数需要立即输出

function count(start,end){
console.log(start++);
var timer = setInterval(function(){
if(start <= end){
console.log(start++);
}else{
clearInterval(timer);
}
},100);
//反一个对象
return{
cancel : function(){
clearInterval(timer);
}
};
}

//count(100,110);

// 实现 fizzBuzz 函数,参数 num 与返回值的关系如下:
//1、如果 num 能同时被 3 和 5 整除,返回字符串 fizzbuzz
//2、如果 num 能被 3 整除,返回字符串 fizz
//3、如果 num 能被 5 整除,返回字符串 buzz
//4、如果参数为空或者不是 Number 类型,返回 false
//5、其余情况,返回参数 num

function fizzBuzz(num) {
if(num % 3 == 0 && num % 5==0){
return 'fizzbuxz';
}else if(num % 3 ==0){
return 'fizz';
}else if(num % 5 ==0){
return 'buzz';
}else if(num ==null || typeof num !== 'number'){
return false;
}else{
return num;
}
};
//console.log(fizzBuzz(3));

function hasStr(str){
var b = /\b/;
return b.test(str);
}

// console.log(hasStr("abc123"));

//冒泡排序
/*
冒泡排序的原理是这样的,比方说有五个数字54321,要按从小到大排列;
首先比较前两个,就是5和4,如果第一个小于第二个,不做操作,如果第一个大于第二个,那么交换二者的位置,即变成45321,然后比较第二个和第三个,交换位置,变成43521,然后第三个和第四个,第四个和第五个,这样一次循环下来,变成43215
所以,一层循环的效果就是挑出最大的一个数字5,冒泡到最后面。但是还要挑出第二大,第三大的数字,等等。所以一层循环根本就不够用,必须再套一层才行。像这个例子,五个数字,起码要进行四轮循环才行。至于为什么要this.length-i,是因为第一次比较五个数字,第二个只要比较前四个就行了,第五个肯定是最大的了
*/
function maopaoSort(arr){
var temp = 0;
for (var i = 0; i < arr.length; i++){
for (var j = 0; j < arr.length - i; j++){
if (arr[j] > arr[j + 1]){
temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}

//console.log(maopaoSort( [5, 4, 3, 2, 1]));

//正常排序方法 -正序
function addSortP(a,b){
return a -b;
}
function arrA(arr){
return arr.sort(addSortP);
}
console.log(arrA([1,4,5,6,2,3]));

//正常排序方法 -反序
function add(a,b){
return b-a;
}
function arrB(arr){
return arr.sort(add);
}
console.log(arrB([1,4,5,6,2,3]));

js里一些经典的算法的更多相关文章

  1. js实现四大经典排序算法

    为了方便测试,这里写了一个创建长度为n的随机数组 function createArr(n) { var arr = []; while (n--) { arr.push(~~(Math.random ...

  2. js的简单的逻辑算法题

    比如题目:寻找1~1000之内,所有能被5整除.或者能被6整除的数字 1 for(var i = 1 ; i <= 1000 ; i++){ 2  if(i % 5 == 0 || i % 6 ...

  3. 经典排序算法总结与实现 ---python

    原文:http://wuchong.me/blog/2014/02/09/algorithm-sort-summary/ 经典排序算法在面试中占有很大的比重,也是基础,为了未雨绸缪,在寒假里整理并用P ...

  4. 经典排序算法及python实现

    今天我们来谈谈几种经典排序算法,然后用python来实现,最后通过数据来比较几个算法时间 选择排序 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是每一次从待排序的数据 ...

  5. 经典排序算法 - 基数排序Radix sort

    经典排序算法 - 基数排序Radix sort 原理类似桶排序,这里总是须要10个桶,多次使用 首先以个位数的值进行装桶,即个位数为1则放入1号桶,为9则放入9号桶,临时忽视十位数 比如 待排序数组[ ...

  6. 经典排序算法 - 归并排序Merge sort

    经典排序算法 - 归并排序Merge sort 原理,把原始数组分成若干子数组,对每个子数组进行排序, 继续把子数组与子数组合并,合并后仍然有序,直到所有合并完,形成有序的数组 举例 无序数组[6 2 ...

  7. 前端要革命?看我在js里写SQL

    在日新月异的前端领域中,前端工程师能做的事情越来越多,自从nodejs出现后,前端越来越有革了传统后端命的趋势,本文就再补一刀,详细解读如何在js代码中执行标准的SQL语句 为什么要在js里写SQL? ...

  8. Jerry 2017年的五一小长假:8种经典排序算法的ABAP实现

    2017年4月29日~5月1日,国际劳动节, 三天的小长假. 在国内,小长假往往是这样的: 然而我当时在戏称为"德村"(德国农村)的Walldorf出差并且住在Wiesloch, ...

  9. 【最全】经典排序算法(C语言)

    算法复杂度比较: 算法分类 一.直接插入排序 一个插入排序是另一种简单排序,它的思路是:每次从未排好的序列中选出第一个元素插入到已排好的序列中. 它的算法步骤可以大致归纳如下: 从未排好的序列中拿出首 ...

随机推荐

  1. 读《HTML5与CSS3权威指南(上册)》笔记

    第二章 1.内容类型:“text/html”.DOCTYPE声明:<!DOCTYPE html>.指定字符编码:<meta charset="utf-8"> ...

  2. centos5 vim升级到7.4

    vim在centos中的版本为7.0,导致很多插件都无法使用,所以想到升级一下. wget ftp://ftp.vim.org/pub/vim/unix/vim-7.4.tar.bz2 tar jvz ...

  3. maven系列(3)-maven生命周期的介绍

    1. 概述 Maven有三套相互独立的生命周期,请注意这里说的是"三套",而且"相互独立",初学者容易将Maven的生命周期看成一个整体,其实不然.这三套生命周 ...

  4. nyoj 118 修路方案(最小生成树删边求多个最小生成树)

    修路方案 时间限制:3000 ms  |  内存限制:65535 KB 难度:5   描述 南将军率领着许多部队,它们分别驻扎在N个不同的城市里,这些城市分别编号1~N,由于交通不太便利,南将军准备修 ...

  5. Objc基础学习记录1

    1.'-'系在实例方法前头 2.'+'类方法class method 相反; 3.void表示没有返回值; 4.&x 和c语言一样,代表的是x的在内存上的地址; 5.*y指向内存存储空间内的数 ...

  6. HttpWebRequest和HttpWebResponse用法小结

    http://www.cnblogs.com/willpan/archive/2011/09/26/2176475.html http://www.cnblogs.com/lip0121/p/4539 ...

  7. HtmlAgilityPack相关网页

    //多线程 http://www.cnblogs.com/jiangming/archive/2012/09/11/MultiThreadCallWebbrowser.html //替换Webbrow ...

  8. VS~单步调试DLL

    有时我们从第三方下载DLL库之后,在使用VS进行调试时还是很麻烦的,现在我总结一下,在开发过过程中调试DLL的方法,希望对各位在开发中有帮助. 1 VS下载插件.Net Refector 2 引用你的 ...

  9. 用Emacs 写python了

    之前都是用python 自带的IDLE 写 python 的,现在换了Emacs,感觉真是不错,爽. 截图留念: 用了sr-speedbar ,顿时有了IDE 的感觉,是不是很爽. 版权声明:本文为博 ...

  10. .NET通用权限系统快速开发框架

    DEMO下载地址: http://download.csdn.net/detail/shecixiong/5372895 一.开发技术:B/S(.NET C# ) 1.Windows XP以上 (支援 ...