【问题标题】:Javascript arrays: merge 2 arrays with priorityJavascript数组:优先合并2个数组
【发布时间】:2016-03-20 23:22:41
【问题描述】:

如何合并两个不同长度的数组,较短数组的值应优先于较大数组的值,但结果仍应具有较大数组的长度。请仔细看看我是如何排列下面的两个数组的:

var short  = [[ 25,12],          [576, 12],          [576,584],          [ 25,584],          [ 25,12]];
var long   = [[301,12],[400,192],[602,230],[461,380],[487,584],[301,497],[115,584],[140,380],[301,12]];
// --------------------as suggested by the above
var result = [[ 25,12],[400,192],[576, 12],[461,380],[576,584],[301,497],[ 25,584],[140,380],[ 25,12]];

在上面的示例中,long 的长度似乎是 short 的两倍,但即使它的大小是原来的三倍或只长一个元素,它也应该可以工作。

【问题讨论】:

  • 似乎替换元素与数组长度的差异相关(较长的数组是两倍长,因此较短的数组每隔一个元素替换一次)。较长数组的长度是否总是较短数组长度的整数倍?
  • 先用简单的英语定义逻辑,这样每个人(包括你自己)都更容易理解和解决
  • @RobG - 样本数据本身不符合您的整数倍数规则
  • @RobG:不,正如我所说,更长的数组可以是从 1 个元素到任何类型的乘法或加法。
  • @Amit-OP 没有说逻辑是什么,我只是猜测希望获得更多信息。没有这个,任何答案都是猜测。

标签: javascript arrays array-merge


【解决方案1】:

这很简单。只需创建较长数组的副本,然后用较短数组中的元素覆盖此副本中的元素。

var m = Math.floor(long.length/short.length);

var result = long.slice();
for(var i = 0; i < short.length; ++i) {
    result[i*m] = short[i];
}

后期编辑:其实这是错误的。这个问题中有趣的问题是间距算法,你不能通过这个特殊的简单乘法得到它。

无论如何我都会把这个答案留在这里,因为它可能有助于澄清这个问题是什么。

【讨论】:

  • 你怎么知道 OP 想要什么?
  • 谢谢,给我几分钟时间测试一下。顺便说一句,你能举个例子吗?
  • @thednp - 实际上,我的回答不起作用。问题似乎是其中之一,我的简单乘法是不正确的。我可能会删除它。
  • 嗯,这是一个好的开始,别担心我会“后门”保护你:)
  • 我觉得应该是(long.length-1)/(short.length-1)
猜你喜欢
  • 2020-06-22
  • 1970-01-01
  • 1970-01-01
  • 2012-07-10
  • 2022-10-16
  • 1970-01-01
  • 2019-03-13
  • 1970-01-01
  • 2021-01-15
相关资源
最近更新 更多