小程式渲染層核心不一致導致Array.flat()不可用

__Vincent發表於2019-10-15

陣列的扁平化方法 Array.prototype.flat() 不支援
解決: 重新定義此方法到陣列物件的原型鏈上

  /**
   * 給陣列新增flat方法
   */
  addMethodToArray() {
    Array.prototype.flat = function(depth) {
      // let arr = this.value; //讀不到
      let arr = this; //陣列本身
      let res = [],
        depthArg = depth || 1,
        depthNum = 0,
        flatMap = arr => {
          arr.map((element, index, array) => {
            if (Object.prototype.toString.call(element).slice(8, -1) === 'Array') {
              if (depthNum < depthArg) {
                depthNum++;
                flatMap(element);
              } else {
                res.push(element);
              }
            } else {
              res.push(element);
              if (index === array.length - 1) depthNum = 0;
            }
          });
        };
      flatMap(arr);
      return res;
    };
  },

複製程式碼

相關文章