【问题标题】:Marge array in a function both sorted and unsorted函数中的 Marge 数组已排序和未排序
【发布时间】:2021-10-01 22:33:07
【问题描述】:

我有一个函数,用于传递已排序和未排序的数组。该函数在两个数组都已排序时工作,但是当我通过 unsorted 时,它不会对数组进行排序并对其进行标记。

示例代码:

// Marge sorted array 
const arrayOne = [1,3,5,11,18];
const arrayTwo = [9, 15, 111, 131, 172];

function margeArray(arrOne, arrTwo){
  const margedArray = [];
  let arrOneItem = arrOne[0];
  let arrTwoItem = arrTwo[0]
  let i = 1;
  let j = 1;

  //Check input
  if(arrOne.length === 0) {
    return arrTwo;
  };

  if(arrTwo.length === 0) {
    return arrOne;
  };

  while(arrOneItem || arrTwoItem) {
    if(!arrTwoItem || arrOneItem < arrTwoItem) {
       margedArray.push(arrOneItem);
       arrOneItem = arrOne[i];
       i++;
    }else {
       margedArray.push(arrTwoItem);
       arrTwoItem = arrTwo[j];
       j++;
    }
  }

  return margedArray;
}

margeArray(arrayOne, arrayTwo)

【问题讨论】:

    标签: javascript arrays sorting arraylist


    【解决方案1】:

    您可以使用展开语法 [...] 来加入数组并排序以对合并进行排序。

    // Merge sorted array 
    const arrayOne = [11,18,1,3,5];
    const arrayTwo = [9,131,172,15,111];
    const msorted = [...arrayOne, ...arrayTwo].sort((a,b) => a-b);
    console.log(msorted)

    【讨论】:

      【解决方案2】:

      您隐含地假设下一个添加的元素将小于两个数组剩余部分中的任何其他元素。仅当两个输入数组都已排序时,这才是正确的。因此,将未排序的数组传递给您的函数时,得到不正确的结果是完全正常的。

      当然,您可以使用 JavaScript 原生数组方法在一行代码中完成这项工作,依赖于自 1995 年以来在全球浏览器中每秒测试数百万次的原语 :)

      这似乎是明智之举。

      【讨论】:

        【解决方案3】:

        你为什么不想只使用原生的sort 方法?:

        function margeArra(arrOne, arrTwo) {
            return [...arrOne, ...arrTwo].sort(function(a, b) {
                return a - b;
            })
        }
        

        【讨论】:

          【解决方案4】:

          您可以通过.concatenating 两个数组然后.sort 它们以数字方式更轻松地做到这一点。

          // Merge sorted array 
          const arrayOne = [1,3,5,11,18];
          const arrayTwo = [9, 15, 111, 131, 172];
          
          function mergeArray(arrOne, arrTwo){
            return arrOne.concat(arrTwo).sort((a,b) => a-b)
          }
          
          console.log(mergeArray(arrayOne, arrayTwo));

          【讨论】:

            猜你喜欢
            • 2017-06-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-12-20
            • 2016-05-18
            • 1970-01-01
            • 1970-01-01
            • 2012-11-27
            相关资源
            最近更新 更多