有一个数组,值全部随机,长度为36:
[1,3,5,7,9,21,2,4,6,8,10,2,
2,3,5,7,9,11,1,4,6,8,10,1,
2,1,5,7,9,11,2,2,6,8,11,1]
给定一个随机数字,例如12(但必须被给定数组的长度整除)
计算得到第1,第13,第25个数字的和为5,第2,第14,第26个数字的和为7,以此类推
得到新数组为[5,7...]的长度为12的新数组。
问:如何根据一个数组和一个符合规定的随机数字求得新数组?
有一个数组,值全部随机,长度为36:
[1,3,5,7,9,21,2,4,6,8,10,2,
2,3,5,7,9,11,1,4,6,8,10,1,
2,1,5,7,9,11,2,2,6,8,11,1]
给定一个随机数字,例如12(但必须被给定数组的长度整除)
计算得到第1,第13,第25个数字的和为5,第2,第14,第26个数字的和为7,以此类推
得到新数组为[5,7...]的长度为12的新数组。
问:如何根据一个数组和一个符合规定的随机数字求得新数组?
用数组的方法尝试了一下。
(function(){
var t = [1,3,5,7,9,21,2,4,6,8,10,2,
2,3,5,7,9,11,1,4,6,8,10,1,
2,1,5,7,9,11,2,2,6,8,11,1]; // 数组
var mod = 12;
if( t.length % mod != 0 ){
console.log("不能整除");
return;
}
var temp = []; // 存储分组后的数组
for(let i=0;i<mod;i++){
temp.push(t.filter(function(item, index, arr){
if((index-i) % mod === 0 )
return item;
}));
}
var ret = temp.map(function(item){
return item.reduce(function(x, y){
return x+y;
});
});
console.log(ret);
})();
One-liners' show-off:
var arr1 = [1,3,5,7,9,21,2,4,6,8,10,2,2,3,5,7,9,11,1,4,6,8,10,1,2,1,5,7,9,11,2,2,6,8,11,1];
function foo(arr, num) {
return [...Array(num)].map(
(e, idx) => arr.filter((el, tIdx) => !((tIdx - idx) % num))
.reduce((a, c) => a + c) );
}
console.log(foo(arr1, 12));
var foo = (arr, n) => (arr.splice(n).forEach((e, i) => (arr[i%n] += e)), arr);
console.log(foo(arr1, 12));
var a =[1,3,5,7,9,21,2,4,6,8,10,2,
2,3,5,7,9,11,1,4,6,8,10,1,
2,1,5,7,9,11,2,2,6,8,11,1],
r =12,l = a.length;
if (l % r === 0){
for (var i =0,aArr = [];i < r;aArr.push(iSum),i++)
for (var j = i,iSum = 0;j < l;iSum += a[j],j += r);
console.log(aArr);
}
封装了一个类:
class ArrayGenerator {
constructor(array) {
this.data = array;
this.size = this.data.length;
}
generate(num) {
if (this.size % num !== 0) return null
let group = new Array(num).fill(0)
for (let i = 0; i < this.size; i++) group[i % num] += this.data[i]
return group
}
}
其实算法很简单。
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决