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

如何用一行JavaScript代码获取复数数组元素的最大模长?

如何简洁找出复数数组元素模长的最大值?

我们知道,获取普通数组的最大值可以用这样的简便写法:

Math.max.apply(null, myArray)

但如果数组中存储的是复数对象,每个对象都带有计算模长的magnitude()方法,有没有简洁的一行代码能找出所有元素模长的最大值?我清楚可以用循环或自定义函数实现,但推测JavaScript应该有更简洁的一行解决方案。

以下是相关代码片段:

function Complex(re, im) {
  this.real = re;
  this.imag = im;
}

Complex.prototype.magnitude = function() {
  return Math.sqrt(this.real * this.real + this.imag * this.imag);
};

var a = new Array(1, 2, 3);
ra = Math.max.apply(null, a); // 正常运行

var b = new Array(new Complex(1, 2), new Complex(1, 3), new Complex(1, 4));
rb = Math.max.apply(null, b)

console.log(ra)
console.log(rb) // 不出意外会得到NaN

简洁解决方案

1. 结合map与Math.max

先通过map将每个复数对象转换为对应的模长,再用熟悉的方法取最大值:

// ES5写法
var maxMagnitude = Math.max.apply(null, b.map(function(c) { return c.magnitude(); }));

// ES6扩展运算符更简洁
const maxMagnitude = Math.max(...b.map(c => c.magnitude()));

2. 使用reduce直接遍历计算

不需要生成中间模长数组,直接在遍历过程中比较并记录最大模长,适合大数据量场景:

// 直接计算最大模长
const maxMagnitude = b.reduce((currentMax, complex) => {
  const mag = complex.magnitude();
  return mag > currentMax ? mag : currentMax;
}, -Infinity);

// 或者更紧凑的一行写法
const maxMagnitude = b.reduce((max, c) => Math.max(max, c.magnitude()), -Infinity);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 05:52:38