码迷,mamicode.com
首页 > 其他好文 > 详细

3、flat函数设计

时间:2019-01-28 16:39:15      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:for   转换   eof   基本数据   函数   类型转换   flag   item   返回   

 

算法题

输入:[‘a‘, [‘b‘, ‘c‘], 2, [‘d‘, ‘e‘, ‘f‘], ‘g‘, 3, 4]

输出:a,b,c,2,d,e,f,g,3,4

 

const arr = [‘a‘, [‘b‘, ‘c‘], 2, [‘d‘, ‘e‘, ‘f‘], ‘g‘, 3, 4]
    // 方式一:递归(代码太多已省略)
    // 方式二:toString(格式转换) 隐式类型转换   [1,2,3].toString() = 1,2,3
    // 方式三:valueOf(格式转化),和toString差不多,把toString换成valueOf
    /*const flag = (arr) => {
      let toString = Array.prototype.toString
      Array.prototype.toString = function() {   // 改变
        return this.join(‘,‘)
      }
      Array.prototype.toString = toString   // 还原
      return arr + ‘‘  // 隐式类型转换,这里arr会先调用valueOf结果返回不是基本数据类型则继续调用toString然后结束,否则会报错
    }
    console.log(flag(arr))*/

    // 方式四:Iterator 对新型的数据结构进行遍历
    Array.prototype[Symbol.iterator] = function() {
      let arr = [].concat(this) // arr = [‘a‘, [‘b‘, ‘c‘], 2, [‘d‘, ‘e‘, ‘f‘], ‘g‘, 3, 4]
      let getFirst = function(array) {
        let first = array.shift()
        return first
      }
      return {  // 遍历器必须返回对象,并且有next()方法
        next() {
          let item = getFirst(arr)
          if (item) {
            return {
              value: item,  // 返回的值,如果item是数组则调toString
              done: false   // 是否遍历结束
            }
          } else {
            return {
              done: true
            }
          }
        }
      }
    }
    const flag = function (arr){
        let r = []
        for (let i of arr) { r.push(i) }
        return r.join(‘,‘)
    }
    console.log(flag(arr))

3、flat函数设计

标签:for   转换   eof   基本数据   函数   类型转换   flag   item   返回   

原文地址:https://www.cnblogs.com/zouxinping/p/10330723.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!