You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS编写AE表达式 使用n次方根在while循环存数组出现undefined

问题诊断与修复方案

错误原因

  • 自定义nthroot函数没有默认返回值:仅在特定if判断成立时返回结果,判断不成立时无返回值,直接输出undefined
  • 根次计算逻辑错误:奇次/偶次根的符号处理逻辑写反,且运行中覆盖了原始的根次参数n,导致判断逻辑完全失效
  • 需求逻辑偏差:你要实现的抛物线(匀加速)位移不需要逐帧计算n次方根,直接用时间进度的平方计算位移效率更高,也不会出现计算错误

修复后的可用代码

仅修复现有n次方根计算代码

// 修复后的n次方根计算函数
function nthroot(x, n) {
  if (n <= 0) return 0; // 规避根次为0/负数的非法输入
  const isOdd = n % 2 === 1;
  const numSign = x < 0 ? -1 : 1;
  const absVal = Math.abs(x);
  const root = Math.pow(absVal, 1 / n);
  // 奇次根保留原始数值符号,偶次根仅返回非负结果
  return isOdd ? numSign * root : root;
}

const distance = 1515;
const frames = 6;
const myArray = [];
let i = 1;
while (i <= frames) {
  myArray.push(nthroot(distance,i++));
}

console.log(myArray);
document.getElementById("demo2").innerHTML = myArray

更适配AE抛物线位移需求的表达式

你要实现n帧内x轴位移为抛物线的效果,直接使用标准化时间进度的平方计算位移即可,不需要额外存数组:

// 直接写在AE图层的位置属性上即可生效
const totalMoveFrames = 6; // 总运动帧数,可绑定表达式控制器
const totalXDistance = 1515; // 总x轴位移,可通过其他逻辑计算
const currentFrame = Math.floor(time / thisComp.frameDuration);

if (currentFrame <= totalMoveFrames) {
  // 匀加速抛物线位移:位移量和时间进度平方成正比
  const progress = currentFrame / totalMoveFrames;
  const currentX = value[0] + totalXDistance * Math.pow(progress, 2);
  [currentX, value[1]]
} else {
  // 运动结束后保持最终位置
  value
}

内容的提问来源于stack exchange,提问作者KevinHaus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 06:36:07