开发分形子对象按层、行列ID获取绝对ID的函数
分形子对象绝对ID计算函数开发需求
核心需求
- 开发函数,通过**层/行ID(rowId)与列ID(colId)**获取分形子对象的绝对ID
- 分形层级规则:每个上层对象包含7个下层对象,层级标识依次为W→G→N→T(标识可自定义,实际对应行星、太阳系、星系等)
- 层统计规则:层3(rowId=2)仅统计N标识对象,层2(rowId=1)仅统计G标识对象
原始数据与上下文
const rawData = [["W1","W2","W3","W4","W5","W6","W7"], ["G1","G2","G3","G4","G5","G6","G7"], ["N1","N2","N3","N4","N5","N6","N7"], ["T1","T2","T3","T4","T5","T6","T7"]] const selIds=[0,1,2,4] // 对应选中的W1、G2、N3、T5的索引(每个元素取值范围[0-6]) // 点击事件输入参数示例 rowId=1 // 层索引-1(取值范围0-6) colId=2 // 元素索引-1(取值范围0-6)
点击子对象时,selIds会根据当前rowId和colId更新,例如上述示例中点击后selIds更新为[0,2,2,4]
计算逻辑示例
result=((7^1*selIds[0])+selIds[1]*7^0)*7^(rowId+1)+3=(0+1)*49+3=52
现有实现函数
const getCurrentIndex = function(elementIndex, layerIndex) { let currentIndex = 0 if(layerIndex > 0) { for(let j = 0; j < layerIndex; j++) { currentIndex += (selIds[j]) * Math.pow(7, layerIndex-j) } } currentIndex += elementIndex currentIndex += 1 return currentIndex }
验证示例(层/行 & 元素/列 = 绝对ID)
W1:G1:N1:T1 = 1 W1:G1:N1 = 1 W4:G5:N6 = 3*7*7 + 4*7 + 6 = 181 W2:G2:N3 = 1*7*7 + 1*7 + 3 = 59 W3:G4:N3 = 2*7*7 + 3*7 + 3 = 122 W4:G4:N4 = 3*7*7 + 3*7 + 4 = 172 W2:G2:N3:T4 = 1*7*7*7 + 1*7*7 + 2*7 + 4 = 410
注:列ID为按:分割后最后一个字符串的数字部分
内容的提问来源于stack exchange,提问作者koji0285
相关产品推荐
相关产品推荐

