Javascript中的矢量类

时间:2014-11-06 17:17:42

标签: javascript arrays

我试图实现一个像下面那样实例化的矢量对象......

var a = new Vector([1,2,3]);
var b = new Vector ([2,2,2]);

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

a.add(b); // should return Vector([4,6,8])

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

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;
  }
}

请帮帮我。谢谢!

3 个答案:

答案 0 :(得分:2)

您需要将结果数组包装在新的Vector对象中:

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;
  }
}

我还要注意,在add对象的原型创建方法(例如Vector方法)方面,您可能希望进一步阅读有关创建JavaScript对象的内容。那里有很多很好的教程。

答案 1 :(得分:0)

James的解决方案看起来不错,但在我看来有点过时了。这是解决现代ES6 Javascript类中问题的一种方法。

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)
    }
  }
}

答案 2 :(得分:0)

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

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