相等地填充数组
Filling arrays equally
给定两个数组(最大长度为15):
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];
用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];
我的情况更复杂,我正在寻找一种有效的方法:我在屏幕上有2面,每面可能有来自FB的ppl的个人资料照片。如果没有足够的照片在一边,我需要添加"假"照片来填充它,所以两边看起来或多或少会均匀地填充照片
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]
从Brad的评论来看,我认为你可以这样做:
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]);
}
算法如下:
1)识别a
中元素的个数
2)确定b
中元素的个数
3)确定data
中元素的个数
4)如果a
中的元素小于b
,则从data
填充a,直到它等于b
,反之亦然
5)如果a
和b
中的元素相等,并且data
中仍然有元素,则依次填充数组a
和b
。
你想让a和b的最后一个索引相差12,最后一个数组的len是12!!我认为你可以使用这个算法!:
for j in data:
while ( j-max(a)) == 12 ):
x++
for i in range(x):
data[i]=a[i]
,然后删除索引号大于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 b = [1,2,3];
var a = [5,6,7,8,9,10,11,12];
var data = [13,14,15,16,17,18,19,20,21,22,23,24,25,26];
// find how many more elements need to be added to the smaller array
var diff = Math.abs(b.length - a.length);
// get the elements to add to the smallest array
var data1 = data.splice(0, diff + ((data.length - diff) / 2));
// data now only contains the elements that will not be added to the smallest array
if (a.length < b.length) {
// a is the smallest array
a.push.apply(a, data1);
b.push.apply(b, data);
} else {
// b is the smallest array
b.push.apply(b, data1);
a.push.apply(a, data);
}
相关文章:
- 将数据推送到数组填充 jqGrid
- 使用 JSON 数组填充输入字段
- 用Javascript中的JSON数组填充HTML
- 动态生成的表格 - 使用数组填充TD值
- 使用数组填充if语句值
- AngularJS:用两个JSON数组填充复选框列表,最初检查了一个数组中的一些项
- 为什么不是't ng表将数据从数组填充到表中
- 在javascript中用数组填充对象
- 高图表 - 从数组填充数据
- 如何从下拉列表中由可观察数组填充的选定项中检索完整对象
- 使用 JavaScript 数组填充下拉选择框
- Javascript array.length 为 0,但数组填充了 40 个项目
- 使用 JSON 数组填充图表
- 数组填充外部函数 - 不可访问的成员
- 用 javascript 数组填充 struts2 select 标签
- 用服务器数组填充 jquery 数组
- 如何使用 json 数组填充 Rails 下拉菜单
- 在用数组填充初始化的数组上使用数组映射的意外行为
- JavaScript 风格的数组填充在 Java 中
- 如何使用 javascript 数组填充 html 标题