ES6数组新操作

一、数组扁平化处理

现在的解决方案

//Array.flat(n)是ES10扁平数组的api,n表示维度,n值为Infinity时维度为无限大
const arr = [1, 2, 3, 5, 6, 2];
console.log(arr.flat());//[1, 2, 3, 5, 6, 2]
const arr2=[1,2,5,[2,4]];
console.log(arr2.flat());// [1, 2, 5, 2, 4]
const arr3=[1,2,[1,2,[3,4]]];
console.log(arr3.flat(3));//[1, 2, 1, 2, 3, 4]
const arr4=[1,2,[3,4,[5,6,[7,8]]]];
console.log(arr4.flat(4));//[1, 2, 3, 4, 5, 6, 7, 8]

以前的解决方案

function flatten(arr) {
while(arr.some(item=>Array.isArray(item))) {
    arr = [].concat(...arr);
  }
    return arr;
}
console.log(flatten([1, [2, 3]]));//[1,2,3]
console.log(flatten([1, [2, 3, [4, 5]]])); //[1,2,3,4,5]

二、数组去重

现在的解决方案

//set是ES6新出来的一种一种定义不重复数组的数据类型
//Array.from是将类数组转化为数组
//...是扩展运算符,将set里面的值转化为字符串
const result=Array.from(new Set([1,2,3,3,4,4])); //[1,2,3,4]
console.log(result);
const result2=[...new Set([1,2,3,3,4,4])]; //[1,2,3,4]
console.log(result2);

以前的解决方案

Array.prototype.distinct = function(){
 var arr = this,
  result = [],
  i,
  j,
  len = arr.length;
 for(i = 0; i < len; i++){
  for(j = i + 1; j < len; j++){
   if(arr[i] === arr[j]){
    j = ++i;
   }
  }
  result.push(arr[i]);
 }
 return result;
}
[1,2,3,3,4,4].distinct(); //[1,2,3,4]

三、数组排序

//sort是js内置的排序方法,参数为一个函数
const arr=[1,2,3,4];
arr.sort((a, b) => a - b); // [1, 2,3,4],默认是升序
console.log(arr);
const arr2=[1,2,3,4];
arr2.sort((a, b) => b - a); // [4,3,2,1] 降序
console.log(arr2);
//冒泡排序
Array.prototype.bubleSort=function () {
    let arr=this,
        len = arr.length;
    for (let outer = len; outer >= 2; outer--) {
      for (let inner = 0; inner <= outer - 1; inner++) {
        if (arr[inner] > arr[inner + 1]) {
          //升序
          [arr[inner], arr[inner + 1]] = [arr[inner + 1], arr[inner]];
          console.log([arr[inner], arr[inner + 1]]);
        }
      }
    }
    return arr;
  }
[1,2,3,4].bubleSort() //[1,2,3,4]    
//选择排序
Array.prototype.selectSort=function () {
  let arr=this,
  len = arr.length;
  for (let i = 0, len = arr.length; i < len; i++) {
    for (let j = i, len = arr.length; j < len; j++) {
      if (arr[i] > arr[j]) {
        [arr[i], arr[j]] = [arr[j], arr[i]];
      }
    }
  }
  return arr;
}
[1,2,3,4].selectSort() //[1,2,3,4] 

四、数组取最大值

现在的解决方案1

const arr=[1,4,2,5];
function getMax5(arr){
  return Math.max(...arr)
}
console.log(getMax5(arr));

现在的解决方案2

const arr=[1,4,2,5];
function getMax4(arr) {
return arr.reduce( (prev, cur)=> {
  return Math.max(prev,cur);
},0)
}
console.log(getMax4(arr));

现在的解决方案3

const arr=[1,4,2,5];
function getMax3(arr){
  return Math.max.apply(this,arr);
}
console.log(getMax3(arr));

以前的解决方案1

const arr=[1,4,2,5];
function getMax(arr){
  const len=arr.length;
  arr.sort((a,b)=>a-b);
  return arr[len-1];
}
const result=getMax(arr);
console.log(result);

以前的解决方案2

function getMax2(arr) {
  let max=arr[0];
  for(let i=0,len=arr.length;i<len;i++){
    if(max<arr[i]){
      max=arr[i];
    }
  }
  return max
}
console.log(getMax2(arr));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在ES6中对数组对象进行去重,有几种方法可以实现。 方法一是使用filter()方法和findIndex()方法。首先使用filter()方法返回一个数组,其中包含满足条件的唯一元素。然后使用findIndex()方法来检查数组中是否已存在当前元素。如果不存在,则将其添加到数组中。这种方法适用于简单的对象数组去重操作。 方法二是使用reduce()方法。reduce()方法可以对数组进行迭代,并返回一个累积值。在这种情况下,我们可以使用reduce()方法来遍历数组并构建一个数组,其中没有重复的元素。可以通过检查每个元素是否在累积值中出现来实现去重。 另外,还可以使用ES6增的Set数据结构来进行去重。Set是一种值的集合,它只能存储唯一的值。可以将数组转换为Set,然后再将Set转换回数组。这样就可以去除重复的元素。 下面是一个示例代码,演示了如何使用reduce()方法实现数组对象去重: ```javascript let person = [ {id: 0, name: "小明"}, {id: 1, name: "小张"}, {id: 2, name: "小李"}, {id: 3, name: "小孙"}, {id: 1, name: "小周"}, {id: 2, name: "小陈"}, ]; let hasObj = {}; person = person.reduce((cur, next) => { hasObj[next.id ? "" : (hasObj[next.id = true && cur.push(next)); return cur; }, []); console.log(person); // 输出: [{"id": 0,"name": "小明"}, {"id": 1,"name": "小张"}, {"id": 2,"name": "小李"}, {"id": 3,"name": "小孙"}] ``` 以上是几种常用的方法来实现ES6数组对象去重的方式。可以根据具体的需求选择其中适合的方法进行操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值