前言
js 的引用类型有数组,对象,类等。
值类型有int,float,number,double,bool,string
引用类型如果使用=表示的是两个对象共用一块内存,某一个对象里面的值改变了都会影响另一个对象的值。如:
var a = [1,2],b=a; b[0] = 2; console.log(a)
这时a也变成了[2,2]。有时候这种引用关系是我们需要的,而有时是不需要的。
值类型则不会存在这种问题。
正文
近来,翻译C++代码,实现了很多类似指针引用类型的方法。比如想在函数内部修改参数并返回就可以用到如下的方式了。
该功能类似于如C++ 某方法可以传入指针,并在方法内部修改该指针,在外部该指针的值就发生了变化。Js 也有引用关系一说,该怎么实现相同的功能呢。
如原始数组是var arr = [1,2,3,4,1]。和数组coArr=[2,3]比较,获取arr中除coArr之外的数组。
var arr = [1,2,3,4,1],coArr = [2,3],exArr =[];
//去除arr中包含coArr的集合存入exarr中并返回
function getExcludArr(arr,coarr,exarr) {
var copyArr = coarr.concat([]);//copy一份值,可以修改copyArr中的值,不改变原始数组。
arr.map((a,index)=>{
var pos = copyArr.indexOf(a);
if(pos >=0 ) {
copyArr.splice(pos,1);
} else {
exarr.push(arr[index]);
}
});
}
getExcludArr(arr,coArr,exArr);
console.log('exclude arr', exArr);
输出结果为:
这样就实现了方法内部修改exArr的值并返回的功能。
后续
var res = [];
function test(res){
var arr = [1,2,3];
//res = arr;
arr.map((item)=>{tes.push(item)}); //不能使用res = arr,否则最后输出为[],还有其他方式或方法可以更方便的在方法内修改res的值而不改变内存吗?
}
console.log(res);
如有更好的方式,可留言交流!