Javascript 中的向量类

Vis*_*hwa 2 javascript arrays vector

我正在尝试实现一个实例化的矢量对象,如下所示......

var a = new Vector([1,2,3]);
var b = new Vector ([2,2,2]);
Run Code Online (Sandbox Code Playgroud)

...当我进行数学运算时,我需要这样的东西...

a.add(b); // should return Vector([3,4,5])
Run Code Online (Sandbox Code Playgroud)

...但是下面的代码只返回一个数组

function Vector(components) {
  // TODO: Finish the Vector class.
  this.arr = components;
  this.add = add;
}

function add(aa) {
  if(this.arr.length === aa.arr.length) {
    var result=[];
    for(var i=0; i<this.arr.length; i++) {
       result.push(this.arr[i]+aa.arr[i]);
    }
    return result;
  } else {
    return error;
  }
}
Run Code Online (Sandbox Code Playgroud)

请帮我一下。谢谢你!

qwr*_*qwr 6

也许扩展 javascript 的原生 Array 更简单,这样就不需要保留额外的Vector.arr属性。这是一个用于学习目的的简单实现,在现代 JS 中可以归结为:

class Vector extends Array {
  // example methods
  add(other) {
    return this.map((e, i) => e + other[i]);
  }
}

// example usage
let v = new Vector(1, 2, 3);
console.log(v.add(v));
Run Code Online (Sandbox Code Playgroud)

该类继承了Array的构造函数。请注意,传入单个值会创建该长度的空数组,而不是长度为 1 的数组。Vector 需要super构造函数中进行调用才能继承奇异的 Array 行为,例如具有特殊length属性,但对于固定长度的数学向量来说不需要这样做。您可以在此处包含更奇特的构造函数行为,例如能够从数组作为输入进行构造。