JavaScript中的数组多维运算

348 阅读1分钟

两个有序一维数组合并成一个有序一维数组

直接上代码

const A=[1,2,2,4,6,7,9,99]
const B=[1,3,4,5,10]

const merge=(arr1,arr2)=>{
  const lenA=arr1.length
  const lenB=arr2.length
  const C=[]
  let a=0; b=0; c=0;   //定义下标
  while(a<lenA && b<lenB){
    if(arr1[a]<arr2[b]){  //两个数组依次比较
      C.push(arr1[a])
      a++
    }else{
      C.push(arr2[b])
      b++
    }
  }
  while(a<lenA){  //若arr2已经排序完成,单独排序arr1
    C.push(arr1[a])
    a++
  }
  while(b<lenB){  //若arr1已经排序完成,单独排序arr2
    C.push(arr2[b])
    b++
  }
  return C
}

console.log(merge(A,B))

这种合并逻辑简单清晰,时间复杂度取决于两个数组的长度O(lenA+lenB)。

将两个无序一维数组合并成一个有序一维数组

可以先各自排序,这里用到的是插值排序;

const A=[5,2,3,9,4,1,7,19,9]

const sort=(arr)=>{
  for(let i=1;i<arr.length;i++){
    for(let j=i;j>0;j--){
      const currentArr=arr[j]
      if(arr[j]<arr[j-1]){
        arr[j]=arr[j-1]
        arr[j-1]=currentArr
      }
    }
  }
  return arr
}

console.log(sort(A))

然后就是将两个有序一维数组合并成一个有序一维数组。

当然也可以先合并再排序;或者直接一边排序一边合并,这种方法逻辑复杂。

多维数组降维成一维数组

const A=[[5,2,3],[9,4,1],[7,[19,[9]]]]

const result=[]
const dArr=(arr)=>{
  for(let i=0;i<arr.length;i++){
    if(Array.isArray(arr[i])){
      dArr(arr[i])  //递归思想
    }else{
      result.push(arr[i])
    }
  }
  return result
}

console.log(dArr(A))

思想就是遍历数组,判断子项是否为数组,是则递归,否则push到result中。

将两个一维数组合并为二维数组

由于这个比较简单,这里就直接上代码

const A=["one","two","three"]
const B=[1,2,3]

const newArr=(arr1,arr2)=>{
  const result=[]
  for(let i=0;i<arr1.length;i++){
    result.push([arr1[i],arr2[i]])
  }
  return result
}

//或者直接 const newArr=A.map((i,index)=>[i,B[index]])

console.log(newArr(A,B))