Javascript中的向量类

Javascript中的向量类,javascript,arrays,vector,Javascript,Arrays,Vector,我正在尝试实现一个向量对象,如下所示 var a=新向量([1,2,3]); var b=新向量([2,2,2]); …当我做数学运算时,我需要这样的东西 a.添加(b);//应返回向量([3,4,5]) …但下面的代码只返回一个数组 函数向量(组件){ //TODO:完成向量类。 此.arr=组件; this.add=添加; } 功能添加(aa){ if(this.arr.length==aa.arr.length){ var结果=[]; 对于(var i=0;i,您需要将生成的数组封装在

我正在尝试实现一个向量对象,如下所示

var a=新向量([1,2,3]);
var b=新向量([2,2,2]);
…当我做数学运算时,我需要这样的东西

a.添加(b);//应返回向量([3,4,5])
…但下面的代码只返回一个数组

函数向量(组件){
//TODO:完成向量类。
此.arr=组件;
this.add=添加;
}
功能添加(aa){
if(this.arr.length==aa.arr.length){
var结果=[];

对于(var i=0;i,您需要将生成的数组封装在一个新的
向量
对象中:

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 new Vector(result);
  } else {
    return error;
  }
}
函数向量(组件){
//TODO:完成向量类。
此.arr=组件;
this.add=添加;
}
功能添加(aa){
if(this.arr.length==aa.arr.length){
var结果=[];

对于(var i=0;i,James的解决方案看起来不错,但在我看来有点过时

class Vector {
  constructor(arr) {
    this.arr = arr;
  }
  add(otherVector) {
    const oa = otherVector.arr;
    if (this.arr.length === oa.length) {
      let res = []
      for(let key in this.arr) {
        res[key] = this.arr[key] + oa[key]
      }
      return new Vector(res)
    }
  }
}

与其创建新的Vector类,不如扩展javascript的本机数组更简单,这样就不需要保留额外的
Vector.arr
属性。在现代JS中:

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

thanx的回复,但这不会解决我的问题。whrn i console.log(a.add(b));它将返回整个函数代码,希望此链接将指向您我所在的位置[link]()它将记录整个向量对象。如果您将其更改为log
b.add(a).arr
它将只记录其中的数组部分。是的,你是对的,这将只给出结果数组,但我想返回类似“Vector([3,4,5])的内容您需要创建一个返回向量的字符串表示形式的方法,并调用该方法,尽管我不知道更改
console.log
行为(根据第一个答案)会有多大进展在jsbin…thanx上作为参考,它帮助我了解了我的情况。我将尝试实现类似的东西,希望能得到我需要的。ty!您可以使用return this.arr.map((o,index)=>o+oa[index]),来代替您的循环逻辑(如果您想要更多ES6的好处)if语句不应该抛出错误而不是不返回任何东西吗?为什么不使用函数方法来处理向量呢?这篇meduim文章很好地解释了它的优点。