通过均匀分布值来有效合并两个数组

2024-05-24

我见过许多问题/答案主题是通过交替值合并两个数组。他们是这样工作的:

let array1 = ["a", "b", "c", "d"];
let array2 = [1, 2];

let outcome = ["a",1 ,"b", 2, "c", "d"] 

但我希望输出更加高效,并且根据数组大小均匀分配值。

expected outcome = ["a","b", 1, "c", "d", 2] 

其他场景

let array2 = [1];
expected outcome = ["a","b", 1, "c", "d"] 

实现这种合并的最佳方式应该是什么?


求两个数组的长度之比,longest.length/shortest.length然后从最长的部分中取出所有最短的部分。

let array1 = ["a", "b", "c", "d", "e"];
let array2 = [1, 2];

const evenDistribute = (array1, array2) => {
  const longest = array1.length > array2.length ? array1 : array2;
  const shortest = array1.length > array2.length ? array2 : array1;
  const ratio = Math.floor(longest.length / shortest.length);
  const results = [];
  for (let i = 0; i < shortest.length; i++) {
    for (let j = 0; j < ratio; j++) {
      results.push(longest[i * ratio + j]);
    }
    results.push(shortest[i]);
  }
  // Grab any that are left over
  for (let i = longest.length - (longest.length % shortest.length); i < longest.length; i++) {
    results.push(longest[i]);
  }
  return results;
}

console.log(evenDistribute(array1, array2));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过均匀分布值来有效合并两个数组 的相关文章