Vector class

by Artem

JavaScript

'use strict';

var Vector = function(components) {
  this.components = components;
};

Vector.prototype.isCorrect = function(vector) {
  if (this.components.length !== vector.components.length) throw new Error('Different vector lengths');
};

Vector.prototype.toString = function() {
  return '(' + this.components.toString() + ')';
};

Vector.prototype.equals = function(vector) {
	if (this.components.length !== vector.components.length) return false;
  const result = this.components.every((component, i) => component === vector.components[i]);
  return result;
};

Vector.prototype.add = function(vector) {
  try {
    this.isCorrect(vector);
    const result = this.components.map((component, i) => component + vector.components[i]);
    return new Vector(result);
  } catch (e) {
    console.log(e);
    throw e;
  }
};

Vector.prototype.subtract = function(vector) {
  try {
    this.isCorrect(vector);
    const result = this.components.map((component, i) => component - vector.components[i]);
    return new Vector(result);
  } catch (e) {
    console.log(e);
    throw e;
  }
};

Vector.prototype.dot = function(vector) {
  try {
    this.isCorrect(vector);
    const result = this.components.reduce((sum, prev, i) => {
      return sum + prev * vector.components[i];
    }, 0);
    return result;
  } catch (e) {
    console.log(e);
    throw e;
  }
};

Vector.prototype.dot = function(vector) {
  try {
    this.isCorrect(vector);
    const result = this.components.reduce((sum, prev, i) => {
      return sum + prev * vector.components[i];
    }, 0);
    return result;
  } catch (e) {
    console.log(e);
    throw e;
  }
};

Vector.prototype.norm = function() {
  const result = this.components.reduce((sum, prev, i) => {
    return sum + Math.pow(prev, 2);
  }, 0);
  return Math.sqrt(result);
};


var a = new Vector([1, 2, 3]);
var b = new Vector([3, 4, 5]);
var c = new Vector([5, 6, 7, 8]);

console.log(a.add(b).equals(new Vector([4, 6, 8, 6])));