html - 一道 JavaScript 的计算题
PHP中文网
PHP中文网 2017-04-11 13:17:00
[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的新数组。

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

PHP中文网
PHP中文网

认证0级讲师

全部回复(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);
PHP中文网

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


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

其实算法很简单。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号