Javascript 均匀填充数组

Javascript 均匀填充数组,javascript,arrays,Javascript,Arrays,给定2个阵列(最大长度为15): 将a和b数组中的数据与data数组中的数据等量地“填充”到a和b数组中的最佳方法是什么,以便它们的长度相同(或尽可能接近),但不超过最大长度 所需的结果可能如下所示: var a = [1,2,3,13,14,15,16,17,18,19,20,21]; var b = [5,6,7,8,9,10,11,12,22,23,24,25,26]; ab=[]; ab=ab.concat(a,b,data); del = (a.length + b.length +

给定2个阵列(最大长度为15):

a
b
数组中的数据与
data
数组中的数据等量地“填充”到
a和
b数组中的最佳方法是什么,以便它们的长度相同(或尽可能接近),但不超过最大长度

所需的结果可能如下所示:

var a = [1,2,3,13,14,15,16,17,18,19,20,21];
var b = [5,6,7,8,9,10,11,12,22,23,24,25,26];
ab=[];
ab=ab.concat(a,b,data);
del = (a.length + b.length + data.length) / 2;
a = [];
b = [];
for (var i = 0; i < Math.ceil(del); i++) {
    a.push(ab[i]);
    b.push(ab[Math.ceil(del) + i]);
}


我的情况更复杂,我正在寻找一种有效的方法:我在屏幕上有两面,每一面都可能有来自FB的ppl个人资料照片。如果一边没有足够的照片,我需要添加“假”照片来填充,这样两边的照片看起来或多或少都是均匀的

算法如下:

1) 确定
a

2) 识别
b

3) 识别
数据中的元素数量

4) 如果
a
中的元素小于
b
,则从
data
填充a,直到它等于
b
,反之亦然


5) 如果
a
b
中的元素相等,并且
数据
中仍有元素,则交替填充数组
a
b

算法如下:

var a    = [1,2,3];
var b    = [5,6,7,8,9,10,11,12];
var data = [13,14,15,16,17,18,19,20,21,22,23,24,25,26];

for( var i = data.length; i--; ){
  if (a.length > b.length)
      b.push(data[i])
  else
      a.push(data[i])
}

console.log(a.length, b.length);
1) 确定
a

2) 识别
b

3) 识别
数据中的元素数量

4) 如果
a
中的元素小于
b
,则从
data
填充a,直到它等于
b
,反之亦然


5) 如果
a
b
中的元素相等,并且
数据
中仍有元素,则交替填充数组
a
b

算法如下:

var a    = [1,2,3];
var b    = [5,6,7,8,9,10,11,12];
var data = [13,14,15,16,17,18,19,20,21,22,23,24,25,26];

for( var i = data.length; i--; ){
  if (a.length > b.length)
      b.push(data[i])
  else
      a.push(data[i])
}

console.log(a.length, b.length);
1) 确定
a

2) 识别
b

3) 识别
数据中的元素数量

4) 如果
a
中的元素小于
b
,则从
data
填充a,直到它等于
b
,反之亦然


5) 如果
a
b
中的元素相等,并且
数据
中仍有元素,则交替填充数组
a
b

算法如下:

var a    = [1,2,3];
var b    = [5,6,7,8,9,10,11,12];
var data = [13,14,15,16,17,18,19,20,21,22,23,24,25,26];

for( var i = data.length; i--; ){
  if (a.length > b.length)
      b.push(data[i])
  else
      a.push(data[i])
}

console.log(a.length, b.length);
1) 确定
a

2) 识别
b

3) 识别
数据中的元素数量

4) 如果
a
中的元素小于
b
,则从
data
填充a,直到它等于
b
,反之亦然


5) 如果
a
b
中的元素相等,并且
data
中仍有元素,则交替填充数组
a
b

以下是不必循环元素的另一种方法:

var a    = [1,2,3];
var b    = [5,6,7,8,9,10,11,12];
var data = [13,14,15,16,17,18,19,20,21,22,23,24,25,26];

for( var i = data.length; i--; ){
  if (a.length > b.length)
      b.push(data[i])
  else
      a.push(data[i])
}

console.log(a.length, b.length);
var a = [1,2,3],
    b = [5,6,7,8,9,10,11,12],
    data = [13,14,15,16,17,18,19,20,21,22,23,24,25,26];

var targetLength = (a.length + b.length + data.length)/2,
    aCnt = Math.ceil(targetLength) - a.length,
    bCnt = Math.floor(targetLength) - b.length;

a = a.concat(data.slice(0, aCnt));
b = b.concat(data.slice(aCnt, data.length));

// a is [1, 2, 3, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]
// b is [5, 6, 7, 8, 9, 10, 11, 12, 23, 24, 25, 26]

下面是另一种不必循环元素的方法:

var a = [1,2,3],
    b = [5,6,7,8,9,10,11,12],
    data = [13,14,15,16,17,18,19,20,21,22,23,24,25,26];

var targetLength = (a.length + b.length + data.length)/2,
    aCnt = Math.ceil(targetLength) - a.length,
    bCnt = Math.floor(targetLength) - b.length;

a = a.concat(data.slice(0, aCnt));
b = b.concat(data.slice(aCnt, data.length));

// a is [1, 2, 3, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]
// b is [5, 6, 7, 8, 9, 10, 11, 12, 23, 24, 25, 26]

下面是另一种不必循环元素的方法:

var a = [1,2,3],
    b = [5,6,7,8,9,10,11,12],
    data = [13,14,15,16,17,18,19,20,21,22,23,24,25,26];

var targetLength = (a.length + b.length + data.length)/2,
    aCnt = Math.ceil(targetLength) - a.length,
    bCnt = Math.floor(targetLength) - b.length;

a = a.concat(data.slice(0, aCnt));
b = b.concat(data.slice(aCnt, data.length));

// a is [1, 2, 3, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]
// b is [5, 6, 7, 8, 9, 10, 11, 12, 23, 24, 25, 26]

下面是另一种不必循环元素的方法:

var a = [1,2,3],
    b = [5,6,7,8,9,10,11,12],
    data = [13,14,15,16,17,18,19,20,21,22,23,24,25,26];

var targetLength = (a.length + b.length + data.length)/2,
    aCnt = Math.ceil(targetLength) - a.length,
    bCnt = Math.floor(targetLength) - b.length;

a = a.concat(data.slice(0, aCnt));
b = b.concat(data.slice(aCnt, data.length));

// a is [1, 2, 3, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]
// b is [5, 6, 7, 8, 9, 10, 11, 12, 23, 24, 25, 26]

从Brad的评论中,我想你可以这样做:

var a = [1,2,3,13,14,15,16,17,18,19,20,21];
var b = [5,6,7,8,9,10,11,12,22,23,24,25,26];
ab=[];
ab=ab.concat(a,b,data);
del = (a.length + b.length + data.length) / 2;
a = [];
b = [];
for (var i = 0; i < Math.ceil(del); i++) {
    a.push(ab[i]);
    b.push(ab[Math.ceil(del) + i]);
}
ab=[];
ab=ab.concat(a,b,数据);
del=(a.length+b.length+data.length)/2;
a=[];
b=[];
for(var i=0;i
摘自布拉德的评论,我想你可以这样做:

var a = [1,2,3,13,14,15,16,17,18,19,20,21];
var b = [5,6,7,8,9,10,11,12,22,23,24,25,26];
ab=[];
ab=ab.concat(a,b,data);
del = (a.length + b.length + data.length) / 2;
a = [];
b = [];
for (var i = 0; i < Math.ceil(del); i++) {
    a.push(ab[i]);
    b.push(ab[Math.ceil(del) + i]);
}
ab=[];
ab=ab.concat(a,b,数据);
del=(a.length+b.length+data.length)/2;
a=[];
b=[];
for(var i=0;i
摘自布拉德的评论,我想你可以这样做:

var a = [1,2,3,13,14,15,16,17,18,19,20,21];
var b = [5,6,7,8,9,10,11,12,22,23,24,25,26];
ab=[];
ab=ab.concat(a,b,data);
del = (a.length + b.length + data.length) / 2;
a = [];
b = [];
for (var i = 0; i < Math.ceil(del); i++) {
    a.push(ab[i]);
    b.push(ab[Math.ceil(del) + i]);
}
ab=[];
ab=ab.concat(a,b,数据);
del=(a.length+b.length+data.length)/2;
a=[];
b=[];
for(var i=0;i
摘自布拉德的评论,我想你可以这样做:

var a = [1,2,3,13,14,15,16,17,18,19,20,21];
var b = [5,6,7,8,9,10,11,12,22,23,24,25,26];
ab=[];
ab=ab.concat(a,b,data);
del = (a.length + b.length + data.length) / 2;
a = [];
b = [];
for (var i = 0; i < Math.ceil(del); i++) {
    a.push(ab[i]);
    b.push(ab[Math.ceil(del) + i]);
}
ab=[];
ab=ab.concat(a,b,数据);
del=(a.length+b.length+data.length)/2;
a=[];
b=[];
for(var i=0;i
您希望a和b的最后一个索引具有12个差异,并且最终数组的len是12!!!我想你可以用这个算法! :


然后删除索引号大于12的索引

您希望a和b的最后一个索引具有12个差异,并且最终数组的len是12!!!我想你可以用这个算法! :


然后删除索引号大于12的索引

您希望a和b的最后一个索引具有12个差异,并且最终数组的len是12!!!我想你可以用这个算法! :


然后删除索引号大于12的索引

您希望a和b的最后一个索引具有12个差异,并且最终数组的len是12!!!我想你可以用这个算法! :

然后删除索引号大于12的索引

我的解决方案是:

var a    = [1,2,3];
var b    = [5,6,7,8,9,10,11,12];
var data = [13,14,15,16,17,18,19,20,21,22,23,24,25,26];

var howManyToFill = (data.length + (b.length + a.length)/2)/2;
// take half of the "data" and put it in "a"
a = a.concat(data.slice(0,howManyToFill));
// what's left goes to "b"
b = b.concat(data.slice(howManyToFill));

console.log(a);
console.log(b);
我的解决办法是:

var a    = [1,2,3];
var b    = [5,6,7,8,9,10,11,12];
var data = [13,14,15,16,17,18,19,20,21,22,23,24,25,26];

var howManyToFill = (data.length + (b.length + a.length)/2)/2;
// take half of the "data" and put it in "a"
a = a.concat(data.slice(0,howManyToFill));
// what's left goes to "b"
b = b.concat(data.slice(howManyToFill));

console.log(a);
console.log(b);
我的解决办法是:

var a    = [1,2,3];
var b    = [5,6,7,8,9,10,11,12];
var data = [13,14,15,16,17,18,19,20,21,22,23,24,25,26];

var howManyToFill = (data.length + (b.length + a.length)/2)/2;
// take half of the "data" and put it in "a"
a = a.concat(data.slice(0,howManyToFill));
// what's left goes to "b"
b = b.concat(data.slice(howManyToFill));

console.log(a);
console.log(b);
我的解决办法是:

var a    = [1,2,3];
var b    = [5,6,7,8,9,10,11,12];
var data = [13,14,15,16,17,18,19,20,21,22,23,24,25,26];

var howManyToFill = (data.length + (b.length + a.length)/2)/2;
// take half of the "data" and put it in "a"
a = a.concat(data.slice(0,howManyToFill));
// what's left goes to "b"
b = b.concat(data.slice(howManyToFill));

console.log(a);
console.log(b);
var b=[1,2,3];
变量a=[5,6,7,8,9,10,11,12];
var数据=[13,14,15,16,17,18,19,20,21,22,23,24,25,26];
//查找需要向较小的数组中添加多少元素
var diff=数学绝对值(b.长度-a.长度);
//获取要添加到最小数组的元素
var data1=data.splice(0,diff+((data.length-diff)/2));
//数据现在只包含不会添加到最小数组中的元素
如果(a.长度
var b=[1,2,3];
变量a=[5,6,7,8,9,10,11,