//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. <Chapter 2>2-2.开发应用(developing the Application)

    一个App Engine应用对网络请求做出响应.它是通过调用请求处理器(quest handlers)来实现的,接受请求参数并返回响应的程序.对于来自请求URL上的请求,App Engine通过一个配 ...

  2. 设计模式系列 1——StaticFactory(静态工厂),AbstractFactory(抽象工厂)

    本文出自 代码大湿 代码大湿 本系列持续更新,敬请关注. 1 静态工厂 静态工厂介绍: 静态工厂模式可以实现接口封装隔离的原则.在客户端只知接口而不知实现的时候可以使用静态工厂模式. 源码请点击我 角 ...

  3. 生成chm文档工具- Sandcastle -摘自网络

    Sandcastle是微软官方的文档生成工具,NDoc开发停止后,这个貌似也是唯一的一个这方面的工具.它从dll文件及其xml注释文件能够 生成完整的帮助文档,支持多种生成格式(Helpe1x:chm ...

  4. linux下改变文件的字符编码

    首先确定文件的原始字符编码: $ file -bi test.txt 然后用 iconv 转换字符编码 $ iconv -f from-encoding -t to-encoding file > ...

  5. 第二百八十六天 how can I 坚持

    bug不断啊,头疼. 今天早上到的倒是挺早. 中午吃的黄焖鸡,晚上加了会班. 勇江的鱼都死了,杨建的还剩3条,晚上到家都快十点了,还洗了衣服,没捞出来呢, 希望可以请下来假吧. 晾上衣服睡觉.

  6. homework-04

    1.准备工作 本次结对编程我们对项目本身就行了分工,既然是测试来驱动开发,那么我们就把本次工作分成了测试与生成两个部分,小明同学负责生成测试数据,而我写测试程序检测测试结果是否正确,相对来说还是小明同 ...

  7. Java邮件服务学习之四:邮箱服务客户端Spring Mail

    一.Spring Mail API Spring邮件抽象层的主要包为org.springframework.mail,Spring提供的邮件发送不仅支持简单邮件的发送.添加附件. 1.邮件发送的核心接 ...

  8. Beginning OpenGL ES 2.0 with GLKit Part 1

    Update 10/24/12: If you’d like a new version of this tutorial fully updated for iOS 6 and Xcode 4.5, ...

  9. Spring入门(11)-Spring与Junit整合

    POM配置 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3. ...

  10. wordpress后台打开慢/卡顿的解决方法

    ---------------------2014年12月29日更新--------------------- 我已经用下面提到的第三种方法禁用了谷歌字体了,最近wordpress后台还是莫名奇妙地非 ...