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