js数组练习

1.用数组实现输入10个成绩,求总分,最高分,最低分

        var arr = new Array(60, 70, 80, 90, 30, 88, 77, 35, 23, 100);

        var sum = 0,max=0;min=0;

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

            sum += arr[i];

            arr.sort(function(a,b){

                return a-b

            })

            max=arr[9]

            min=arr[0]

        }

        console.log(sum,max,min)

        var arr = [86, 45, 72, 39, 44, 77, 98, 87, 67, 59]

        var max = 0;

        var sum = 0

        var min = 100

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

            sum = sum + arr[i]//求和

            if (arr[i] > max) {

                max = arr[i]

            }

            if (arr[i] < min) {

                min = arr[i]

            }

        }

        console.log(sum, max, min);

        2.用数组实现 序列:1,2,3,5,8,13...。找出第20个数是多少 ? 得出前20个数之和是多少?

        var arr = [], sum = 0, num = 0

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

            if (i < 2) {

                num = i + 1

            } else {

                num = arr[i - 1] + arr[i - 2]

            }

            arr.push(num)

            sum += num

        }

        console.log(sum, arr);

        3.用Date实现 输入2个日期 (年月日),计算两个日期相差多少天?

        function inp() {

            var date1 = prompt('请按照规定格式输入,例如2020,10,20')

            var date2 = prompt('请按照规定格式输入,例如2020,10,20')

            var result = sub(date1, date2)

            console.log(result);

        }

        function sub(date1, date2) {

            date1 = new Date(date1)

            date2 = new Date(date2)

            return Math.abs(date1 - date2) / 1000 / 60 / 60 / 24

        }

        4.输入日期 (年月日)和连接符(可以是 / 或者 - )返回 2019 / 10 / 11  或者 2019 - 10 - 11

        function format(s){

            var year=prompt('请按照规定格式输入')

            var month=prompt('请按照规定格式输入')

            var date=prompt('请按照规定格式输入')

            return [year,month,date].join(s)

        }

        console.log(format('-'));

        1.猜数字游戏,有一个0 - 100随机数 玩家有5次输入的机会猜,

        每次猜一次,都要将结果告诉玩家是小了,还是大了

        如果在5次机会内猜中,输出“聪明”,程序结束

        如果5次机会用完 程序直接结束。

        var num = parseInt(Math.random()*101);

        console.log(num)

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

            var arr=prompt('请输入一个数:');

            if(arr==num){

                console.log('你真是个小机灵鬼');

                break;

            }else if(arr>num){

                alert('猜大了')

            }else{

                alert('猜小了')

            }

        }

        2.有一个4个长度的数组,每个位置装有0 - 9之间的随机数字,有10次输入的机会来猜每个位置的上的数是什么,

        每次猜完4个数字以后都要给出提示,正确几个 错误几个,

        只有位置和数字完全正确才算正确,其他情况全视为错误。

        var arr = new Array(4)

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

            arr[i] = parseInt(Math.random() * 10)

        }

        console.log(arr);

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

            var ans = new Array(4)

            var yesNum = 0, noNum = 0

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

                ans[j] = prompt('第' + (i + 1) + '次的第' + (j + 1) + '个')

                if (ans[j] == arr[j]) {

                    yesNum++

                } else {

                    noNum++

                }

            }

            console.log(`正确${yesNum}个,错误${noNum}个`);

            if (yesNum == 4) {

                console.log('聪明');

                break;

            }

        }

        3. 根据双色球摇奖规则,产生6个红球1个蓝球;红球范围1 - 33, 蓝球范围1 - 16. 红球不能有重复的产生。

        思路:每次产生一个随机球,存入数组中,下一次产生的随机球,要和数组中的进行比较,如果有相等的,

        则重新产生一个号(循环变量要减1),反之继续存入数组;直到产生6个球;蓝球单独产生;最后输出所有球。

        var red = [parseInt(Math.random() * 33 + 1)]//先准备一个//20

        // 第二个 要跟 第一个 来比较

        for (var i = 0; red.length < 6; i++) {//1 2 3

            console.log(`第${i + 1}次`);

            var num = parseInt(Math.random() * 33 + 1)//21 20 20

            if (red.indexOf(num) == -1) {

                red.push(num)//[20,21]

            }

        }

        console.log(red);

        var blue = parseInt(Math.random() * 16 + 1)

        console.log(blue);

        1、数组去重[1, 2, 3, 4, 2, 1, 3, 5, 6, 9, 5]  返回出来的结果[1, 2, 3, 4, 5, 6, 9]

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

        function show(arr) {

            var str = []

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

                if (str.indexOf(arr[i]) == -1) {

                    str.push(arr[i])

                }

            }

            return str

        }

        console.log(show(arr));


        var arr = [1, 2, 3, 1, 2]

        var arr2 = arr.sort()//[1,1,2,2,3]

        var res = [arr2[0]]

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

            if (arr2[i] != res[res.length - 1]) {

                res.push(arr2[i])

            }

        }

        console.log(res);

        2、数组排序[1, 2, 3, 4, 2, 1, 3, 5, 6, 9, 5]  返回出来的结果[1, 1, 2, 2, 3, 3, 4, 5, 5, 6, 9]

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

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

            arr.sort()  

        }

        console.log(arr);

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

        var temp = 0, count = 0

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

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

                count++

                console.log(arr, count);

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

                    temp = arr[j]

                    arr[j] = arr[j + 1]

                    arr[j + 1] = temp

                }

            }

        }

        console.log(arr);

        3、排序后去重

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

        arr.sort(function(a,b){

            return a-b

        })

        var str = []

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

            if (str.indexOf(arr[j]) == -1) {

                str.push(arr[j])

            }

        }

        console.log(str);

        给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

        不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

        var arr = [1, 2, 3, 4, 2, 1, 3, 5, 6, 9, 5]

        var len = arr.length

        for (var i = 0; i < len - 1; i++) {

            var j=i+1

            for (; j < len - 1; j++) {

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

                    arr.splice(j,1)

                }

            }

        }

        console.log(arr);

        function removeDuplicates(nums) {

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

                if (nums[i] == nums[i + 1]) {

                    nums.splice(i, 1)

                    i--

                }

            }

            return nums

        }

        console.log(removeDuplicates([0, 0, 0, 1, 1, 2, 2, 3, 4]));

        5、以数组的第二个字符排序

        var arr = ['hello', 'gay', 'blob', 'fyi', 'circle', 'rooom', 'zzz']

        function compareSort() {

            var newArr = []

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

                //{id:e,origin:hello}

                //{id:a,origin:gay}

                newArr.push({ id: arr[i][1], origin: arr[i] })

            }

            console.log(newArr);

            newArr.sort(function (a, b) {

                var x = a.id//e

                var y = b.id//a

                if (x > y) {

                    return 1

                }

                if (x < y) {

                    return -1

                }

                return 0

            })

            console.log(newArr);

            var result = []

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

                result.push(newArr[j].origin)

            }

            console.log(result);

        }

        compareSort()

        1、给定A、B两个数组,同时存在于A、B两个数组中的项称为“交集”;只在A数组中,

        且不在B数组中的项称为“差集”编写函数intersection(arr1, arr2)返回两个数组的交集数组;

        var arr = [1, 2, 3, 4], arr2 = [3, 4, 5] //3,4

        function intersection(arr1, arr2) {

            var temp = []

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

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

                    temp.push(arr2[i])

                }

            }

            return temp

        }

        console.log(intersection(arr, arr2));

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

        var intersection = arr.filter(function (item) {

            return arr2.indexOf(item) > -1

        })

        console.log(intersection);

        2、编写函数difference(arr1,arr2)返回两个数组的差集数组

        var arr = [1, 2, 3, 4], arr2 = [3, 4, 5]//1,2,5

        var differenceA = arr.filter(function (item) {

            return arr2.indexOf(item) == -1

        })

        var differenceB = arr2.filter(function (item) {

            return arr.indexOf(item) == -1

        })

        console.log(differenceA.concat(differenceB));

        3、编写一个二维数组,存储九九乘法表。

        var arr=[];

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

            var str=[];

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

                str.push(i+'*'+j+'='+i*j);

            }

            arr.push(str)

        }

        console.log(arr);

        4、编写函数flattenArray(arr) ,可以将数组扁平化。数组拉平

        例如[1, [2, 3], [4, 5], [6, [7, 8], 9, [[[10, [[11, 12], 13], 14], 15, 16], 17], 18]]

        扁平化的结果为:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]

        var arr = [1, [2, 3], [4, 5], [6, [7, 8], 9, [[[10, [[11, 12], 13], 14], 15, 16], 17], 18]];

        var str = arr.toString();

        var arr2 = str.split(',');

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

            arr2[i] = parseInt(arr2[i]);

        }

        console.log(str);

        console.log(arr2);

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

            var temp = []

            function flat(list) {

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

                    if (Array.isArray(list[i])) {

                        flat(list[i])

                    } else {

                        temp.push(list[i])

                    }

                }

                return temp

            }

            console.log(flat(arr));

        5、编写函数isAnagram(str1, str2)用来检查两个字符串是否互为变位词。变位词指不计顺序的情况下两个单词包含完全相同的字母,

        不多不少。比如“silent”和“listen”互为变位词。

        function isAnagram(str1, str2) {//abc  abc

            var arr1 = str1.split('')

            var arr2 = str2.split('')

            if (arr1.length != arr2.length) {

                return

            }

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

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

                    return false

                } else {

                    arr1.splice(arr1.indexOf(arr2[i]), 1)

                }

            }

            return arr1.length == 0

        }

        console.log(isAnagram('abc', 'bcb'));

        6、编写函数macrepeat(arr)返回数组中连续出现最多次的项。

        例如maxrepeat([1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4])将返回3.

        function maxrepeat(arr) {

            var obj = {}

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

                var char = arr.splice(i, 1).toString()// 拿到 数组的每一个值  并删除第一位

                // console.log(char);

                obj[char] = obj[char] || 0//把数组出现过的值 当做对象的键 {1:0,2:1}

                obj[char]++// 累加计数

                i--// 从头开始

            }

            console.log(obj);

            var max = 0

            for (var key in obj) {

                console.log(key);

                if (obj[key] > max) {

                    max = key

                }

            }

            console.log(max);

        }

        maxrepeat([1, 1, 2, 3, 3, 3, 4, 5])

        console.log(maxrepeat([1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4]));

        7、根据数组中每个对象的i属性,由小到大排序如下数组。

        var arr = [{ i: 5, v: 1 }, { i: 2, v: 4 }, { i: 3, v: 2 }, { i: 1, v: 5 }, { i: 4, v: 3 }];

        var arr = [{ i: 5, v: 1 }, { i: 2, v: 4 }, { i: 3, v: 2 }, { i: 1, v: 5 }, { i: 4, v: 3 }];

        function compare(arr) {

            return function (a, b) {

                var val1 = a[arr];

                var val2 = b[arr];

                return val1 - val2;

            }

        }

        console.log(arr.sort(compare('i')))

        var arr = [{ i: 5, v: 1 }, { i: 2, v: 4 }, { i: 3, v: 2 }, { i: 1, v: 5 }, { i: 4, v: 3 }];

        arr.sort(function (a, b) {

            return a.i - b.i

        })

        console.log(arr);

        9、利用原生JS实现 数组的翻转 非reverse、

        var str = 'hello'

        var arr = str.split('')

        console.log(arr);

        function myreverse(arr) {

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

                var temp = arr[i]

                arr[i] = arr[arr.length - i - 1]//’dl‘

                arr[arr.length - i - 1] = temp

            }

            return arr.join('')

        }

        console.log(myreverse(arr));

        10.1 - 100任意取10个数 放入数组并排序

        var arr = [];

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

            var res = Math.floor(Math.random() * 101 + 1);

            arr.push(res);

        }

        arr.sort(function (a, b) {

            return a-b;

        });

        console.log(arr);

        11、请用js计算0 - 10000中0出现的次数

        var arr = []

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

            var pos = i.toString().split('')//[1,2]  [1,3]

            pos.map(function (item) {//[1,0]

                if (item == 0) {

                    arr.push(item)

                }

            })

        }

        console.log(arr.length);

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