数组,迭代,排序,搜索

 1     <script>
 2         // 访问和迭代数组--斐波那契数列的前20个数
 3         /* 
 4         已知斐波那契数列中的前两项是 1,从第三项开始,每一项都等于前两项之和
 5         */
 6         // const fibonacci = [];
 7         // fibonacci[1] = 1;
 8         // fibonacci[2] = 1;
 9         // for (let i = 3; i < 20; i++) {
10         //     console.log(i);
11         //    fibonacci[i] = fibonacci[i-1] + fibonacci[i-2] 
12         // }
13         // console.log(fibonacci);
14         // for (let i = 1; i < fibonacci.length; i++) {
15         //     // console.log(i);
16         //     const element = fibonacci[i];
17         //     console.log(element);
18         // }
19 
20         /*  数组合并--concat  连接2个或更多数组,并返回结果 */
21         // const zero = 0;
22         // const positiveNumbers = [1,2,3]
23         // const negativeNumbers = [-3,-2,-1]
24         // let numbers = negativeNumbers.concat(zero, positiveNumbers)
25         // console.log('negativeNumbers',negativeNumbers); // 元素组不变
26         // console.log('numbers',numbers); //[-3, -2, -1, 0, 1, 2, 3]
27 
28         /* 
29         every方法迭代--
30                 every 方法会迭代数组中的每个元素,直到返回 false。
31                 对数组中的每个元素运行给定函数,如果该函数对每个元素都返回 true,则返回 true
32         */
33         //    function isEvent(x) {
34         //        console.log(x);
35         //        return x%2 === 0 ? true : false;
36         //    }
37         const isEven = x => x % 2 === 0;
38         // let numbers_every = [1, 2, 3, 4, 5, 6, 7, 8, 9]
39         // let test = numbers_every.every(isEven)
40         // console.log(test); // false
41 
42         /* some方法迭代--
43                对数组中的每个元素运行给定函数,如果任一元素返回 true,则返回 true */
44 
45         /* 
46         forEach方法迭代
47             对数组中的每个元素运行给定函数。这个方法没有返回值
48         */
49         //    let numbers_forEach = [1, 2, 3, 4, 5, 6, 7, 8, 9];
50         //    numbers_forEach.forEach(x => console.log(x%2 === 0));
51 
52         /* 
53         两个会返回新数组的迭代方法
54         map
55         filter
56         */
57         let numbers_filter_map = [1, 2, 3, 4, 5, 6, 7, 8, 9];
58         const evenNunbers = numbers_filter_map.map(isEven);
59         // 它保存了传入 map 方法的 isEven函数的运行结果
60         console.log(evenNunbers); // [false, true, false, true, false, true, false, true, false]
61 
62         const filterNumbers = numbers_filter_map.filter(isEven)
63         //  它返回的新数组由使函数返回 true 的元素组成
64         console.log(filterNumbers); //  [2, 4, 6, 8]  
65 
66         /* 
67         reduce--
68             reduce 方法接收一个有如下四个参数的函数:previousValue、
69             currentValue、index 和 array。因为 index 和 array 是可选的参数,所以如果用不到它们
70             的话,可以不传。这个函数会返回一个将被叠加到累加器的值,reduce 方法停止执行后会返回
71             这个累加器。如果要对一个数组中的所有元素求和,这就很有用。
72         */
73        let numbers_reduce = [1, 2, 3, 4, 5, 6, 7, 8, 9];
74        let resule = numbers_reduce.reduce((previous, current) => previous + current);
75        console.log(resule); // 45
76     </script>

    <script>
        /* 
            for ... of循环迭代
        */
        let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9];
        // for (const n of numbers) {
        //     console.log(n % 2 === 0 ? 'event' : 'odd');
        // }

        /* 
             使用@iterator对象
        */
        let iterator = numbers[Symbol.iterator]();
        // console.log(iterator.next().value); // 1
        // for (const n of iterator) {
        //     console.log(n);
        // }
        // 数组中的所有值都迭代完之后,iterator.next().value 会返回 undefined
        // console.log(iterator.next().value); // undefined

        /* 
            entries 方法返回包含键值对的@@iterator
            keys 方法返回包含数组索引的@@iterator
            values 方法返回的@@iterator 则包含数组的值
        */
        //    let aEntries = numbers.entries(); // 得到键值对的迭代器
        //    console.log(aEntries.next()); // {value: Array(2), done: false}
        //    console.log(aEntries.next().value); //  [1, 2]
        //    for (const n of aEntries) {
        //        console.log(n);
        //    }

        /* 
            from--
                Array.from 方法根据已有的数组创建一个新数组。
        */
        // let numbers2 = Array.from(numbers)
        // console.log(numbers2); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
        // let evens = Array.from(numbers, x => (x%2 == 0))
        // console.log(evens); // [false, true, false, true, false, true, false, true, false

        /* 
            Array.of--
               Array.of 方法根据传入的参数创建一个新数组 
        */
        // let numbers3 = Array.of(1,2,3)
        // // 相当于
        // let numbers4 = [1,2,3]    
        // // 用该方法复制已有的数组
        // let numbersCopy = Array.of(...numbers3)

        /* 
           fill--
                 fill 方法用静态值填充数组
        */
       let numbersCopy = Array.of(1,2,3,4,5,6)
       // 数组中从 1 开始的所有位置上的值都是 2
    //    numbersCopy.fill(2,1)
    //    console.log(numbersCopy); //  [1, 2, 2, 2, 2, 2]
       // 同样,我们也可以指定结束填充的索引
       numbersCopy.fill(1,3,5); //我们会把 1 填充到数组索引 3 到 5 的位置(不包括5)
       console.log(numbersCopy); // [1, 2, 3, 1, 1, 6]


       /* 
            copyWithin--
                copyWithin 方法复制数组中的一系列元素到同一数组指定的起始位置
       */

       /* 
            -------------------排序元素------------------
       */

    </script>

posted @ 2021-06-29 13:51  小白咚  阅读(50)  评论(0编辑  收藏  举报