关于数组的一些不low的操作

1.扁平化n维数组

     [1,[2,3]].flat(2) //[1,2,3]

    [1,[2,3,[4,5]].flat(3) //[1,2,3,4,5]

    [1[2,3,[4,5[...]].flat(Infinity)

Array.flat(n)是ES10扁平数组的api, n表示维度, n值为 Infinity时维度为无限大。



2.去重

1.

Array.from(new Set([1,2,3,3,4,4])) //[1,2,3,4]

    [...new Set([1,2,3,3,4,4])] //[1,2,3,4]

set是ES6新出来的一种一种定义不重复数组的数据类型。

Array.from是将类数组转化为数组。

...是扩展运算符,将set里面的值转化为字符串。

2.

var arr1 =[1,2,5,6,2,1,2,1,2];

var arr2=[];

for(var i=0;i<arr1.length;i++){

if(arr2.indexOf(arr1[i])==-1){

arr2.push(arr1[i]);

}

}

console.log(arr2);

3.

var flag;

var arr=[5,7,6,5,2,5,9,6,2,10];

var arr1=[];

function quchong(arr){

for(var i=0;i<arr.length;i++){

flag = false;

for(var j=0;j<arr1.length;j++){

if(arr1[j]==arr[i]){

flag=true;

}

}

if(!flag){

arr1.push(arr[i]);

}

}

return arr1;

}

quchong(arr);



3.排序

1.冒泡排序

function bubleSort(arr) {

for (var i = 0; i < arr.length - 1; i++) {

for (var j = 0; j < arr.length - 1 - i; j++) {

if (arr[j + 1] < arr[j]) {

[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];

}

}

}

return arr;

}

2.选择排序

function bubleSort(arr) {

for(var i=0;i<arr.length-1;i++){

var min = i;

for(var j=i+1;j<arr.length;j++){

if(arr[j]<arr[min]){

min = j ;

}

}

[arr[i],arr[min]]=[arr[min],arr[i]];

}

return arr;

}

3.两边排序


var cont = prompt("请输入一个数组,并用英文逗号隔开");

var arr = cont.split(",");

var arr1=[];

var arr2=[];

var max =Math.max.apply(null, arr);

if (arr.length%2==0) {         //偶数

    arrSplit(arr,arr1,arr2); //调用排序函数

    document.write(arr1.concat(arr2));         //拼接arr1和arr2数组

}

else{ //奇数

    arr.sort(function(a, b){ //对数组进行排序

        return b-a;

    });

    var newArr = arr.slice(1);                 //除掉最大一个的数,得到偶位数的数组

    arrSplit(newArr,arr1,arr2)

    arr2.unshift(max);                         //把最大那个数插入arr2

    document.write(arr1.concat(arr2));

    }

function arrSplit(arr,arr1,arr2){ //封装一个对偶数位数组进行分割和排序的函数

    var Array = []; //定义一个数组用于存放arr1和arr2的返回值

    for (var i=0; i<arr.length/2; i++) {        //拆分成两个数组

        arr1[i]= arr[i];

        arr2[i]= arr[i+arr.length/2];

    }

    arr1.sort(function (a, b){         //升序

        return a-b;

    });

    arr2.sort(function (c, d){                  //降序   

        return d-c;

    });

    Array[0]=arr1;

    Array[1]=arr2;

    return Array;                              //返回arr1和arr2数组

}



4.找出数组中重复出现过的数字

var arr = [1,2,4,4,3,3,1,5,3];

function duplicates(arr) {

var result = [];

arr.forEach(function(elem) {

if (arr.indexOf(elem) != arr.lastIndexOf(elem) && result.indexOf(elem) == -1) {

result.push(elem);

}

});

return result;

}



5.求数组里面最大值

var arr = [5,6,8,45,96,57,2];

Math.max.apply(this,arr);



6.不用变量使两数交换

1.

var a =10,b=2;

a=a+b;

b=a-b;

a=a-b;

2.

var a =10,b=2;

[a,b]=[b,a]



7.求数组总和

1.

arr.reduce(sum);

function sum(total,num){

return total+num;

}

2.

function sum(arr) {

      var len = arr.length;

      if(len == 0){

        return 0;

      } else if (len == 1){

        return arr[0];

      } else {

        return arr[0] + sum(arr.slice(1));

      }

    }

    sum([1,2,3,4]) //10

利用 slice截取改变数组,再利用递归求和



8.对象和数组的转化

    Object.keys({name:'张三',age:14}) //['name','age']

    Object.values({name:'张三',age:14}) //['张三',14]

    Object.entries({name:'张三',age:14}) //[[name,'张三'],[age,14]]

    Object.fromEntries([name,'张三'],[age,14]) //ES10的api,Chrome不支持 , firebox输出{name:'张三',age:14}



9.过滤数组

[1,2,3].filter(item=>{return item>2}) //[3]



10.有一项满足

[1,2,3].some(item=>{return item>2}) //true



11.每一项是否满足

[1,2,3].every(item=>{return item>2}) //false



12.map遍历

[1,2,3].map(() => 0)     //[0,0,0]

原生JSforEach()和map()遍历

    共同点:

    1.都是循环遍历数组中的每一项。

    2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项item,当前项的索引index,原始数组input。

    3.匿名函数中的this都是指Window。

    4.只能遍历数组。

      foreach()

        参数:value数组中的当前项, index当前项的索引, array原始数组;

        数组中有几项,那么传递进去的匿名回调函数就需要执行几次;

        理论上这个方法是没有返回值的,仅仅是遍历数组中的每一项,不对原来数组进行修改;但是可以自己通过数组的索引来修改原来的数组;

      map()

        参数:value数组中的当前项,index当前项的索引,array原始数组;

        区别:map的回调函数中支持return返回值;return的是啥,相当于把数组中的这一项变为啥(并不影响原来的数组,只是相当于把原数组克                   隆一份,把克隆的这一份的数组中的对应项改变了);



13.类数组转化

    Array.prototype.slice.call(arguments) //arguments是类数组(伪数组)

    Array.prototype.slice.apply(arguments)

    Array.from(arguments)

    [...arguments]

        //类数组:表示有 length属性,但是不具备数组的方法。

        //call、 apply:改变 slice里面的 this指向 arguments,所以 arguments也可调用数组的方法。

       // Array.from:将类似数组或可迭代对象创建为数组。

       // ...:将类数组扩展为字符串,再定义为数组。

14用*输出菱形

//打印行数是7

    var line=7;

    for(var i=0;i<line;i++) {

        //前四行,每行递增两个

        if(i<=3) {

            for(var j=1;j<=line-i-4;j++) {

                document.write(' ');

            }

            for(var j=0;j<i*2+1;j++) {

                document.write('*');

            }

        } else {

            for(var j=1;j<=i-line+4;j++) {

                document.write(' ');

            }

            //i=4,打印5个

            //i=5,打印3个

            //i=6,打印1个

            for(var j=(line-i)*2-1;j>0;j--) {

                document.write('*');

            }

        }

        document.write('<br />');

    }

15.9*9乘法表的打印方法

1.

for(var i=1;i<10;i++){

var oUl=document.createElement('ul');

document.body.appendChild(oUl);

for(var j=1;j<=i;j++){

var oLi=document.createElement('li');

oLi.innerText = i + '*' +j;

oUl.appendChild(oLi);

}

}

2.

document.write("<div class='box'>"); //最外层div

for (var i=1; i<=9; i++) { //行

document.write("<div>");

for (var j=1; j<=i; j++) {         //列

document.write("<span class='column'>"+ i + "×" + j + "=" + i*j + "</span>");

}

document.write("</div>");

}

document.write("</div>");

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容

  • 1.用js实现随机选取10~100之间的10个数字,存入一个数组,并排序 //要是获取不重复的,则对随机数...
    persistlu阅读 5,542评论 0 0
  • # 数组部分 # 1.## array_chunk($arr, $size [, $preserve_key = ...
    clothTiger阅读 1,151评论 0 1
  • 第五章******************************************************...
    fastwe阅读 668评论 0 0
  • 第四天 数组【悟空教程】 第04天 Java基础 第1章数组 1.1数组概念 软件的基本功能是处理数据,而在处理数...
    Java帮帮阅读 1,583评论 0 9
  • 奶奶带着逗逗出去了,我偷懒睡到九点多才睡醒,醒来和逗逗爸带着逗逗去江边玩,出门的时候逗逗催我,还让爸爸抱着,最近几...
    逗逗的妈妈姚兰阅读 189评论 0 0