数组的方法:

336 阅读1分钟

除了下面这些,还要结合这里一起看看 juejin.cn/post/698239…

  <script>
        // 一 数组扁平化
        // 方法一: reduce + concat 无视数据类型
        function flatten(arr) {
            return arr.reduce((result, item) => {
                return result.concat(Array.isArray(item) ? flatten(item) : item)
            }, [])
        }
        let arr = [...flatten([1, 2, 3, [5, 5, 6, [7, 8]]])]
        // arr = Array.from(new Set(arr))
        // const arr1 = [1, 2, 3, ["5", 5, 6, [7, 8]]]
        console.log(arr);

        // 方法二:只有数据类型的才可以  toString + slpit + map + parseInt
        // console.log([2,[3,[4,[5,[6]]]]].toString().split(',').map(item => parseInt(item)));
        // console.log(["1", 2, 3, ["5", 5, 6, [7, 8]]].toString().split(',').map(item => parseInt(item)));

        // 方法三: join + split + map + parseInt
        // console.log(["1", 2, 3, ["5", 5, 6, [7, 8]]].join(',').split(',').map(item => parseInt(item)));

        // 方法四:arr.flat(Infinity)
        // console.log(arr1.flat(Infinity));

        // 二 数组去重
        // 方法一(es6常用)
        // const arr2 = [1, 1, 1, 2, 2, 3, 3, 5, 1, 6]
        // console.log(Array.from(new Set(arr2)));

        // 方法二(es5 for嵌套for + splice)
        // function unique(arr2) {
        //     for (var i = 0; i < arr2.length; i++) {
        //         for (j = i + 1; j < arr2.length; j++) {
        //             if (arr2[i] == arr2[j]) {
        //                 arr2.splice(j, 1)
        //                 j--
        //             }
        //         }
        //     }
        //     return arr2
        // }
        // console.log(unique(arr2));
        
        // 方法三(filter + indexOf) 筛选条件:当前元素位置===数组该元素的第一个位置
        	let arr = [8, 2, 2, 4, 3, 5]
	let r = arr.filter(function (currentValue, index, arr) {
		return arr.indexOf(currentValue) === index
	})
	console.log(r); // [8, 2, 4, 3, 5]

        // 三 数组排序
        // 方法一 arr.sort
        // const arr3 = [1, 1, 1, 2, 2, 3, 3, 5, 1, 6]
        // console.log(arr3.sort((a, b) => {
        //     return b - a
        // }))
        // 方法二 冒泡排序 for + for
        // for (var i = 0; i < arr3.length; i++) {
        //     for (var j = i + 1; j < arr3.length; j++) {
        //         if (arr3[i] > arr3[j]) {
        //             var temp = []
        //             temp = arr3[i]
        //             arr3[i] = arr3[j]
        //             arr3[j] = temp
        //         }
        //     }
        // }
        // console.log(arr3);

        // 四 数组最大值
        // 方法一
        // let arr4 = [1, 1, 1, 2, 2, 3, 3, 5, 1, 6]
        // // console.log(Math.max(...arr4));
        // arr4 = arr4.sort()
        // console.log(arr4[arr4.length-1]);

        // 五 数组求和
        // 方法一 arr.reduce
        // let arr5 = [1, 1, 1, 2, 2, 3, 3, 5, 1, 6, 5]
        // function total(arr5) {
        //     return arr5.reduce(function (result, num) {
        //         return result + num
        //     })
        // }
        // console.log(total(arr5));

        // 方法二 
        // let total = 0
        // for (var i = 0; i < arr5.length; i++) {
        //     total += arr5[i]
        // }
        // console.log(total);

        // 六 数组合并
        // 方法一 concat
        // var arr6 = [1, 2, 3]
        // var arr66 = [4, 5, 6]
        // var arr666 = arr6.concat(arr66)
        // console.log(arr666);
        // // 方法二 ...
        // console.log([...arr6, ...arr66]);

        // 七 判断数组中是否有值 
        // 方法一 :indexOf 有值返回对应下标 没有返回 -1
        var arr7 = [1, 2, 1, 3]
        console.log(arr7.indexOf(1));
        // 方法二:findIndex 直接返回下标位置 找不到 返回 -1
        console.log(arr7.findIndex(item => item == 1));


        // 方法三 :includes 有返回 true 无返回 false
        console.log(arr7.includes(1));
        // 方法四: some 找到返回 true 找不到 返回false
        console.log(arr7.some(item => item == 33));

        // 方法五:find 直接返回查到到对应的内容 找不到 返回undefined
        console.log(arr7.find(item => item == 3));

        // 区别:
        // indexOf :查找值作为第一个参数,采用 === 比较,更多的是用于查找基本类型,如果是对象类型,则是判断是否是同一个对象的引用
        // findIndex :比较函数作为第一个参数,多用于非基本类型(例如对象)的数组索引查找,或查找条件很复杂

        // some() 方法用于检测数组中的元素是否满足指定条件,不会改变原始数组,不会对空数组进行检测。
        //        返回布尔值 如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测,否则则返回false。
        // includes() 方法用来判断一个数组是否包含一个指定的值,如果是返回 true,否则false

        // 九 每项设置值 array.fill(value, start, end)
        console.log([2, 3, 5].fill(true, false, true)); // [true,3,5]
        console.log([2, 3, 5].map(() => 0)); // [0,0,0]
        console.log([false, false, false].map(() => 0)); // [0,0,0]

        // 十 每一项是否满足/某一项是否满足
        console.log([2, 3, 5].every(item => item > 2));
        console.log([2, 3, 5].some(item => item > 2));

        // 十一:对象和数组转化
        console.log(Object.keys({ name: '张三', age: 14 })); // ["name", "age"]
        console.log(Object.values({ name: '张三', age: 14 })); // ["张三", 14]
        console.log(Object.entries({ name: '张三', age: 14 })); //  //  [Array(2), Array(2)]   0: (2)["name", "张三"]1: (2)["age", 14]
    </script>