美文网首页
数组小题目

数组小题目

作者: 四爷在此 | 来源:发表于2019-03-16 23:21 被阅读0次

数组去重

function rmDup(arr) {
  var tmp = [];
  return arr.filter((e) => { if (!tmp.includes(e)) { return tmp.push(e);return true; } })
}

// 方案二:用reduce
function rmDup(arr) {
  return arr.reduce((agg, e) => {
    return agg.includes(e) ? agg : agg.concat(e);
  }, [])
}

// 方案三:用ES6 Set
function rmDup(arr) { return Array.from(new Set(arr)) }

对于第二种方案,稍微解释下。其实reduce我也用的少,不过在求和等情境下用的多。因为 Array.reduce(func, []) 的第一个参数是func(agg, element){}, agg 表示上一次迭代的返回值,element是当前迭代的数组元素。也就是说每次迭代都可以得到前一次迭代的数据。这就很适合累积性的计算场景。reduce 的第二个参数是初始数组,也就是遍历第一个数组元素时,func 收到的agg === []

数组扁平化

数组扁平化,实际上是降维的应用场景。有层次嵌套的数组扁平化,往往需要用到递归

function flatArr(arr) {
  return [].concat(...arr.map(e => (Array.isArray(e) ? flatArr(e) : e )))
}

flatArr([11, [22, [ 33, 44]]]) // [11, 22, 33, 44]


凡是能用递归的地方,都能用迭代实现。。。但是这道题貌似不能这么解.
下面是第二个方案,语句更多,但是可读性强一些
function flatArr(arr) {
  var res = [];
  arr.forEach((ele) => {
    // 凡遇到 ele 是数组,就需要再次递归展开
    if (Array.isArray(ele)) {
      res = res.concat(...flatArr(ele))  // 只要有嵌套,就继续递归,直到ele 是非数组元素
    } else {
      res.push(ele); // 只有非数组元素才能往最终 res 里面push
    }
  })
  return res;  // 所以保证 flatArr 返回都是扁平数组
}

~~这道题思路其实也很简单,规则想得越简单越好实现,我们这个函数就是实现把[11, [22,33]] 这种类型转化为[11, 22, 33],那么如果碰到深层嵌套的,就继续调用自身,只有所有数组元素都是非数组,才能退出递归,走第二个条件分支。所以这个推出条件很关键,不然就会一直递归递归递归。。。

相关文章

  • 数组小题目

    数组去重 对于第二种方案,稍微解释下。其实reduce我也用的少,不过在求和等情境下用的多。因为 Array.re...

  • 数组小题目

    如何找到无序数组中第K大的数?利用快速排序的思想,每次找到某节点的最终位置来缩小检索数组的大小

  • 121. 买卖股票的最佳时机

    等待测试测上线项目过程做个小题目 题目: 给定一个数组 prices ,它的第 i 个元素 prices[i] 表...

  • 数组平均分割算法

    题目 题目1将一个长度为n(n>0)的整型数组分割成两个数组,要求这两个数组的和之差最小题目2任意交换两个长度都为...

  • 看看简书的markdown

    题目 小题目 test markdown

  • 链表小题目

    如何判断两条单向链表是否相交,以及相交节点 同时遍历两个链表,求出长度差,然后长的链表走完 N次以后,短链表再开始...

  • 《做最好的自己》读后感

    《做最好的自己》这本书里面有一个小题目是我非常感兴趣的,那个小题目是《马戏团里的演员》,就这一个题目是我非常...

  • 小题目大格局

    每一次课程改革,都会带来全新的理念。每一次教材的改变,都会带来规模浩大的培训,都会请专家为我们传达新书的编排思路以...

  • 小题目 大视野

    《光的直线传播》课后练习“动手动脑学物理”的第一题,要求用作图的方法解释,为什么“井底之蛙,所见甚小”?对于这一题...

  • 小题目大智慧

    先来看下题目 一般人的解题思路是“试”,不停的试,瞎试。 稍微好一点的会按照些未经深思熟虑的思路来试,或者验证。当...

网友评论

      本文标题:数组小题目

      本文链接:https://www.haomeiwen.com/subject/vouemqtx.html