美团面试题(外包实战笔试题)

首先第一道阿里让我用 arr = [3, [[7, [1, 5]], 4], 8, [6]];将他转化为一个平铺的数组,并将他转化为从小大的顺序排列

方法一

    function flattenAndSort(array) {
      return array.reduce((result, element) => {
        // 如果元素是数组,则递归调用flattenAndSort
        if (Array.isArray(element)) {
          console.log(element, "1");
          result = result.concat(flattenAndSort(element));
        } else {
          result.push(element);
        }
        return result;
      }, []).sort((a, b) => a - b); // 排序数组
    }
    const flattenedAndSortedArray = flattenAndSort(arr);
    console.log(flattenedAndSortedArray, "27");

方法二

 function getArry(arr) {
      const trust= []
      function fn(arr) {
        arr.forEach(element => {
          if (Array.isArray(element)) {
            fn(element);
          } else {
            trust.push(element);
          }
        });
      }
      fn(arr)
      return trust.sort((a, b) => a - b)
    }
    const trust = getArry(arr)
    console.log(trust);

第二道题面试官考我了一个promise.all的方法

function flattenAndSortAsync(array) {
  return Promise.all(
    array.map(element => {
      return new Promise((resolve, reject) => {
        if (Array.isArray(element)) {
          // 如果元素是数组,递归调用 flattenAndSortAsync
          flattenAndSortAsync(element)
            .then(subArray => resolve(subArray))
            .catch(error => reject(error));
        } else {
          // 如果元素不是数组,直接返回该元素
          resolve(element);
        }
      });
    })
  ).then(flattenedArray => flattenedArray.flat().sort((a, b) => a - b));
}

const arr = [3, [7, [1, 5]], 4, 8, [6]];

// 使用 Promise.all 方法
flattenAndSortAsync(arr)
  .then(result => {
    console.log(result);
  })
  .catch(error => {
    console.error(error);
  });

当初因为聊的比较不错,所以手写的就考了2道,大部分考的都是面试题

你可能感兴趣的:(前端,javascript,面试)