一道 JavaScript 的计算题

有一个数组,值全部随机,长度为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的新数组。

问:如何根据一个数组和一个符合规定的随机数字求得新数组?

阅读 3.9k
5 个回答
const f = (arr, p) => arr.reduce((a, v, i) => (a[i%p] = (a[i%p]||0) +v, a), []);

f([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);

用数组的方法尝试了一下。


(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));

literally show-off:

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
    }
}

其实算法很简单。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题