首页 > 其他分享 >数组降维-去重-排序

数组降维-去重-排序

时间:2023-07-29 11:02:11浏览次数:45  
标签:arr console interval 降维 let 数组 var 排序

let arr = [1,23,[121,1,53,[234,342,324,[234,432],234]]]

快速实现

let arr1 = arr.flat(Infinity) //降维
  let arr2 = Array.from( new Set(arr1)) //去重,转为数组
  let arr3 = arr2.sort((a,b)=>(a-b)) // 排序
  console.log(arr3)

数组降维方法

1:递归

var arr1 = [[0, 1], [2, 3], [4, 5]];
var arrFn=(arr)=> ( [].concat( ...arr.map(x => Array.isArray(x) ? arrFn(x) : x) ) )
arrFn(arr1)



  var arr = [[1, 2, 3], 4, 5, 6, [[7]], []] //多维数组
	const res = []
	function fn(array) {
	  for (var i of array) {
	    if (Array.isArray(i)) {
	      fn(i)
	    } else {
	      res.push(i)
	    }
	  }
	}
	fn(arr)
  console.log(res

2:Array.flat()

const newArr = arr.flat() //参数为展开嵌套深度(number类型)

参数: 
	Infinity 展开任意深度的嵌套数组

数组去重

1:filter方法

function fn(arr) {
  let newArr = arr.filter((item, index) => {
    return arr.indexOf(item, 0) === index
  })
  return newArr
}
console.log(fn(arr))

2:set方法

let arr = [1,22,1,3,[2,1,32,[1,3,43,24,23532,4,32],1,3]]
  
  let newArr = Array.from( new Set(arr)) //去重,转为数组
  let newArr = [...new Set(arr)] //去重,转为数组

数组排序

1:sort

let arr = [1, 4, 6, 7, 3, 5, 8];
  
  let arr1 = arr.sort((a,b)=>(a-b)) //a-b 升序  b-a 降序

2:冒泡排序

let arr = [1, 4, 6, 7, 3, 5, 8];
  let max = 0;
  for (let i = 0; i < arr.length; i++) {
      for (let j = 0; j < arr.length - i - 1; j++) {
          if (arr[j] > arr[j + 1]) {  // > 升序  < 降序
              max = arr[j];
              arr[j] = arr[j + 1];
              arr[j + 1] = max;
          }
      }
  }
  console.log(arr);

3:选择排序

let arr = [1, 4, 6, 7, 3, 5, 8];
  var temp;
  for(var i=0;i<arr.length-1;i++){
      for(var j=i+1;j<arr.length;j++){
          if(arr[i]>arr[j]){
              temp=arr[i];
              arr[i]=arr[j];
              arr[j]=temp;
          }
      }
  }
  console.log(arr)

4:希尔排序

function xier(arr){
    var interval = parseInt(arr.length / 2);  //分组间隔设置
    while(interval > 0){
        for(var i = 0 ; i < arr.length ; i ++){
            var n = i;
            while(arr[n] < arr[n - interval] && n > 0){
                var temp = arr[n];
                arr[n] = arr[n - interval];
                arr[n - interval] = temp;
                n = n - interval;
            }
        }
        interval = parseInt(interval / 2);
    }
    return arr;
}

console.log(xier([12,9,38,44,7,98,35,59,49,88,38]))

补充 对象数组排序

//对象数组排序
var arr = [
    {name:'syy',age:0},
    {name:'wxy',age:18},
    {name:'slj',age:8},
    {name:'wj',age:20}
];
 
function compare(property){
    return function(a,b){
        var value1 = a[property];
        var value2 = b[property];
        return value1 - value2;//升序,降序为value2 - value1
    }
}
arr.sort(compare('age'))
console.log(arr)

标签:arr,console,interval,降维,let,数组,var,排序
From: https://blog.51cto.com/u_16202629/6890948

相关文章

  • 数组
    数组定义数组是相同类型数据的有序集合。其中每个数据称为元素,每个元素可以通过索引(下标)来访问。索引(index)数组的基本特点长度是确定的。数组一旦被创建,他的大小就是不可以改变的其元素的类型必须相同,不允许出现混合类型数组类型可以是任何数据类型,包括基本类型和引用类型......
  • FineBI-点击表头进行排序
      基本思路:1.创建数据集-->orderby${参数1}${参数2}:参数1接收列名,参数2接收asc/desc2.添加模板参数flag,用于标识列名↑或列名↓3.选择所有排序字段-->超级链接-->网络报表(链接自身)-->添加参数col/sort/flag分别等于列名/公式/公式(见图2)4.......
  • 帆软报表实现点击表头排序功能
     FINEREPORT实现跟EXCEL表格一样的,点击表头升降序功能,效果见下图示例:(点击字段切换升降序) 一、创建一个数据查询,并添加数据集参数select*from`purchase_order`orderby${columns}${sort}记得两个参数之间要加个空格  再添加一个参数模板,用来把箭头传进去......
  • 八大排序算法
    1.冒泡排序排序原理:数组元素两两比较,交换位置,大元素往后放,那么经过一轮比较后,最大的元素,就会出现在最大素引处。/***@description冒泡排序*@author:PeiChen*@version1.0*/publicclassBubbleSort{publicstaticvoidmain(String[]args){int[]a......
  • golang打印指针切片/数组的值
     FmtSlice2String方法可以将指针切片的值打印处理packagemainimport( "fmt" "reflect")typeStudentstruct{ Namestring`json:"name"cn:"名字"` Ageuint64`json:"age"cn:"年龄"`}funcmain(){ s:=mak......
  • 寻找数组中重复的数字
    寻找数组中重复的数字​ 给定一个包含n+1个整数的数组nums,其数字都在[1,n]范围内(包括1和n),可知至少存在一个重复的整数。假设nums只有一个重复的整数,返回这个重复的数。1<=n<=\(10^5\)nums.length==n+11<=nums[i]<=nnums中只有一个整数出......
  • 洛谷 P1347 排序 - 拓扑排序
    P1347排序题意依次给一些具有排序关系的序列,问你在能否在若干个序列之后确定元素的顺序、判断元素关系存在矛盾、判断无法确认元素顺序思路对于每一个排序关系均进行toposort,后面就是toposort判环(出现矛盾),toposort判顺序,无法确认唯一关系。详见代码或看洛谷题解区代码......
  • 树状数组的扩展应用
    「观前提醒」「文章仅供学习和参考,如有问题请在评论区提出」目录O(N)建树方法一方法二维护区间和单点修改,区间查询区间修改,单点查询区间修改,区间查询维护二维子矩阵和(二维树状数组)单点修改,子矩阵查询子矩阵修改,单点查询子矩阵修改,子矩阵查询求逆序对个数求数列中小于x的元......
  • 3.2 排序 参考代码
    P1059[NOIP2006普及组]明明的随机数计数排序#include<cstdio>inta[1005];intmain(){ intn,cnt=0; scanf("%d",&n); for(inti=1;i<=n;i++){ intx;scanf("%d",&x); if(a[x]==0){//这个数没出现过(第一次出现) a[x]=......
  • 拓扑排序
    拓扑排序给定一张有向无环图,排出所有顶点的一个序列A满足:对于图中的每条有向边(x,y)x在A中的出现都在y之前,则称A是改图的顶点的一个拓扑序。如图所示,{2351746},{3215764}都是合法的拓扑序。用途:可以判断有向图中是否有环,可以生成拓扑排序Kahn算法实现拓扑排序e......