瀏覽代碼

数组的一些api

DESKTOP-MK04A0R\chuck 3 年之前
父節點
當前提交
4710db9408
共有 3 個文件被更改,包括 148 次插入2 次删除
  1. 16 0
      06/index.html
  2. 131 1
      06/src/index.js
  3. 1 1
      README.md

+ 16 - 0
06/index.html

@@ -10,7 +10,23 @@
 <body>
     <script>
         const arr = [1,2,3,4,2,3]
+        //去重
         console.log(unique2(arr))
+        //合并
+        console.log(concat(arr,[98,90],1,2))
+        //切片
+        console.log(slice(arr,1,2))
+        //扁平化
+        console.log(flatten2([1,2,[3,4,[5,6]]]))
+        //数组分块
+        console.log(chunk([1,2,3,4],3))
+        //数组差集
+        console.log(diffrence([1,2,3],[1,2]))
+        //删除数组元素 并返回删掉的元素
+        console.log(pull(arr,1,2,5))
+        console.log(arr)
+        //获取数组某些元素
+        console.log(drop(arr,2))
     </script>
 </body>
 </html>

+ 131 - 1
06/src/index.js

@@ -16,10 +16,140 @@ function unique(arr){
 }
 
 /**
- * 集合法
+ * 集合法去重
  * @param {*} arr 
  * @returns 
  */
 function unique2(arr){
     return [...new Set(arr)]
+}
+
+/**
+ * 数组合并
+ * @param {*} arr 
+ * @param  {...any} args 
+ * @returns 
+ */
+function concat(arr,...args){
+    const result = [...arr]
+    args.forEach(item=>{
+        if(Array.isArray(item)){
+            result.push(...item)
+        }else{
+            result.push(item)
+        }
+    })
+    return result
+}
+
+/**
+ * 切片
+ * @param {*} arr 
+ * @param {*} start 
+ * @param {*} end 
+ * @returns 
+ */
+function slice(arr,start,end){
+    if(arr.length <= 0) return []
+    start = start || 0
+    if(start >= arr.length) return []
+    end = end || arr.length
+    if(start >= end) end = arr.length
+    const result = []
+    arr.forEach((item,index)=>{
+        if(index >= start && index < end){
+            result.push(item)
+        }
+    })
+    return result
+}
+
+/**
+ * 将多维数组变为一维数组 1
+ * @param {*} arr 
+ * @returns 
+ */
+function flatten1(arr){
+    let result = []
+    arr.forEach(item=>{
+        if(Array.isArray(item)){
+            result = result.concat(flatten1(item))
+        }else{
+            result = result.concat(item)
+        }
+    })
+    return result
+}
+
+/**
+ * 将多维数组变为一维数组 2
+ * @param {*} arr 
+ * @returns 
+ */
+function flatten2(arr){
+    let result = [...arr]
+    while(result.some(item=>Array.isArray(item))){
+        result = [].concat(...result) // concat 可以把元素放入数组 示例:[].concat(1,2,[3,4]) => [1,2,3,4]
+    }
+    return result
+}
+
+/**
+ * 数组分组
+ * @param {*} arr 
+ * @param {*} size 
+ * @returns 
+ */
+function chunk(arr,size = 1){
+    if(arr.lenght === 0) return []
+    let result = []
+    let tmp = []
+    arr.forEach(item=>{
+        if(tmp.length === 0){
+            result.push(tmp)
+        }
+        tmp.push(item)
+        if(tmp.length === size){
+            tmp = []
+        }
+    })
+    return result
+}
+/**
+ * 差
+ * @param {*} arr 
+ * @param {*} arr1 
+ * @returns 
+ */
+function diffrence(arr,arr1){
+    return arr.filter(item=>!arr1.includes(item))
+}
+
+/**
+ * 删除数组元素,并返回删掉的元素
+ * @param {*} arr 
+ * @param  {...any} args 
+ * @returns 
+ */
+function pull(arr,...args){
+    const result = []
+    for(let i = 0;i<arr.length;i++){
+        if(args.includes(arr[i])){
+            result.push(arr[i])
+            arr.splice(i,1)
+            i--
+        }
+    }
+    return result
+}
+/**
+ * 不改变原数组 获取右侧元素
+ * @param {*} arr 
+ * @param {*} size 
+ * @returns 
+ */
+function drop(arr,size){
+    return arr.filter((item,index)=>{
+        return index >= size
+    })
 }

+ 1 - 1
README.md

@@ -4,7 +4,7 @@
 * 03 bind函数封装实现
 * 04 函数节流与防抖
 * 05 es6数组函数封装 map、reduce、filter、find、findIndex、every、some
-* 06 数组的去重
+* 06 数组的去重、合并、slice、扁平化、分块、差集、删除、获取
 
 ## 运行
 npm i