//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. C#中的堆和栈

    看到一篇讲堆和栈的文章,是我目前为止见到讲的最易懂,详细和深入的.我翻译成中文.以此总结. 原文=>C#Heap(ing) Vs Stack(ing) in .NET 在net framewor ...

  2. 分类算法之朴素贝叶斯分类(Naive Bayesian Classification)

    1.什么是分类 分类是一种重要的数据分析形式,它提取刻画重要数据类的模型.这种模型称为分类器,预测分类的(离散的,无序的)类标号.例如医生对病人进行诊断是一个典型的分类过程,医生不是一眼就看出病人得了 ...

  3. Apache Spark Streaming的优点

    Apache Spark Streaming的优点: (1)优势及特点 1)多范式数据分析管道:能和 Spark 生态系统其他组件融合,实现交互查询和机器学习等多范式组合处理. 2)扩展性:可以运行在 ...

  4. iOS中的谓词(NSPredicate)使用

    http://www.cocoachina.com/ios/20160111/14926.html 首先,我们需要知道何谓谓词,让我们看看官方的解释: The NSPredicate class is ...

  5. 【转】并发编程之Operation Queue

    http://blog.xcodev.com/blog/2013/10/28/operation-queue-intro/ 随着移动设备的更新换代,移动设备的性能也不断提高,现在流行的CPU已经进入双 ...

  6. 439. Segment Tree Build II

    最后更新 08-Jan-2017 开始介绍线段树的主要作用了,可以快速在区间查找极值,我猜是这样的..... 一个NODE的最大值取决于它左边和右边最大值里大 按个,所以,所以什么?对了,我们该用po ...

  7. Parallax Occlusion Mapping

    如上图,本来是采样original texture coordinates点的颜色,其实却采样了correcter texture coordinates点的颜色. 而且会随着视线的不同看到凹凸程度变 ...

  8. PPTP + FreeRADIUS + MySQL 安装与配置

    原文地址:http://www.zhukun.net/archives/5375 PPTP + FreeRADIUS + MySQL 安装与配置 2012/03/29Linux运维centos.Fre ...

  9. TFS代码签入指导

    1. 如果文件没有被放入到TFS中, 那么它是不存在的. 这一点是最好被理解的, 如果你的代码没有被签入到代码管理中,那么就不可能被团队的其他人获取的得到. 具体如何将文件纳入到TFS中请参考 Pla ...

  10. 关于webapi 返回的类型的笔记

    经过测试发现使用IE浏览器返回的数据是json,而使用Firefox和Chrome返回的则为xml,经研究发现IE在发生http请求时请求头accpet节点相比Firefox和Chrome缺少&quo ...