Javascript数组:优先合并2个数组
Javascript arrays: merge 2 arrays with priority
如何合并两个不同长度的数组,较短数组的值应优先于较大数组的值,但结果仍应具有较大数组的长度。请仔细看看我是如何排列下面的两个数组的:
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
的两倍,但即使它的大小是原来的三倍或仅长一个元素,它也应该可以工作。
这很简单。只需创建一个较长数组的副本,然后用较短数组中的元素覆盖此副本中的元素。
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];
}
后期编辑:其实这是错误的。这个问题中有趣的问题是间距算法,你不能通过这个特定的简单乘法得到它。
无论如何我都会在这里留下这个答案,因为它可能有助于澄清这个问题是什么。
如何合并两个不同长度的数组,较短数组的值应优先于较大数组的值,但结果仍应具有较大数组的长度。请仔细看看我是如何排列下面的两个数组的:
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
的两倍,但即使它的大小是原来的三倍或仅长一个元素,它也应该可以工作。
这很简单。只需创建一个较长数组的副本,然后用较短数组中的元素覆盖此副本中的元素。
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];
}
后期编辑:其实这是错误的。这个问题中有趣的问题是间距算法,你不能通过这个特定的简单乘法得到它。
无论如何我都会在这里留下这个答案,因为它可能有助于澄清这个问题是什么。