吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 598|回复: 4
收起左侧

[求助] JS 数组 算法求解,一个类矩阵 求子数组的 近平均整数数组的算法

[复制链接]
zhairy 发表于 2022-10-12 17:50
150吾爱币
本帖最后由 zhairy 于 2022-10-12 17:56 编辑

现有两个 变量数组  
[JavaScript] 纯文本查看 复制代码
const obja = [{ a: 6, t: 32 }]
const objb = [
  { s: 'a', t: 5, chart: [] },
  { s: 'a', t: 4, chart: [] },
  { s: 'a', t: 5, chart: [] },
  { s: 'a', t: 6, chart: [] },
  { s: 'a', t: 6, chart: [] },
  { s: 'a', t: 6, chart: [] },
]

或者是这样的  
[JavaScript] 纯文本查看 复制代码
const obja = [{ a: 3, t: 14},{ b: 2, t: 12},{ c: 1, t: 6}]
const objb = [
  { s: 'a', t: 5, chart: [] },
  { s: 'a', t: 4, chart: [] },
  { s: 'a', t: 5, chart: [] },
  { s: 'b', t: 6, chart: [] },
  { s: 'b', t: 6, chart: [] },
  { s: 'c', t: 6, chart: [] },
]

现在希望经过计算能得到这样的 得到类似的结果

[JavaScript] 纯文本查看 复制代码
const a1 = [1, 0, 1, 0, 1, 0, 1, 1]  //总和为 objb中对应的 t
const a2 = [0, 1, 1, 1, 0, 0, 1, 0]
const a3 = [1, 1, 0, 0, 1, 1, 0, 1]
const a4 = [1, 1, 1, 1, 1, 1, 0, 0]
const a5 = [0, 1, 0, 1, 1, 1, 1, 1]
const a6 = [1, 0, 1, 1, 0, 1, 1, 1]


或者这样的  希望得到的结果是  各个子数组 每个成员位置加起来的和   尽量是靠近 总体和的 整数平均数

[JavaScript] 纯文本查看 复制代码
const a1 = [1, 0, 1, 0, 1, 0, 1, 1]  //总和为 objb中对应的 t
const a2 = [0, 1, 1, 1, 0, 0, 1, 0]
const a3 = [1, 1, 0, 0, 1, 1, 0, 1]
const b1 = [1, 1, 1, 1, 1, 1, 0, 0]
const b2 = [0, 1, 0, 1, 1, 1, 1, 1]
const b3 = [1, 0, 1, 1, 0, 1, 1, 1]



这个是个人 尝试计算的 代码 ,结果很不如意 ,有没有精通的大神 帮忙下 ,拜谢 !
[Asm] 纯文本查看 复制代码
const obja = [{ a: 6, t: 32 }]
const objb = [
  { s: 'a', t: 5, chart: [] },
  { s: 'a', t: 4, chart: [] },
  { s: 'a', t: 5, chart: [] },
  { s: 'a', t: 6, chart: [] },
  { s: 'a', t: 6, chart: [] },
  { s: 'a', t: 6, chart: [] },
]

function getData(len, v) {
  let data = [];
  let total = v
  let avg = Math.floor(total / len);
  let remainder = total % len;
  for (let i = 0; i <= len; i++) {
    if (remainder !== 0) {

      data.push(avg + 1)
      remainder--;
    } else {
      data.push(avg)
    }
  }
  return data;
}
let a = 0
let data = [];
function bb() {
  objb.map(e => {
    const i = obja.findIndex(el => el[e.s])
    if (!a) {
      a = obja[i][e.s]
    }
    if (obja[i][e.s] == 1) {
      e.chart = getData(9, e.t)
    } else {
      let temp = []
      temp = getData(9, e.t)
      if (a == obja[i][e.s]) {
        data = getData(9, obja[i].t)
        e.chart = temp
        temp.forEach((item, x) => { data[x] = data[x] - item })
      } else {
        temp.forEach((item, x) => {
          data[x] = data[x] - item
          
       /*   if (data[x] >= item) {
            data[x] = data[x] - item
          } else {
            console.log(" data[x]", data[x]);
            item = data[x]
            temp[x + 1] += (item - data[x])
            data[x] = 0
          }*/
        })
        console.log("temp", temp);
        e.chart = temp
      }
    }
    a--
  })
  console.log('aaa', objb)
}

这个 数据 主要用来echarts 的批量展示

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| zhairy 发表于 2022-10-12 19:29
没人么 ?
cwsctrl 发表于 2022-10-12 19:29
 楼主| zhairy 发表于 2022-10-12 19:30

有用的  ,这个只是 代码的计算部分  ,obja   没贴出来的 代码 调用的
cwsctrl 发表于 2022-10-12 23:36
康康私信
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 05:28

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表