3flat函数设计

Posted zouxinping

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3flat函数设计相关的知识,希望对你有一定的参考价值。

 

算法题

输入:[‘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))

以上是关于3flat函数设计的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——声明函数

VSCode自定义代码片段8——声明函数

一个函数应该返回什么可以失败?

是否有在单个活动中处理多个片段的 Android 设计模式?

十条实用的jQuery代码片段

如何更改谷歌地图标记上方的标题和片段设计