什么时候改变子数组更新子数组vs.创建一个新的子数组?[JavaScript]



我有一个[Edit: JavaScript]代码,它使用从我的主数据集mainArray跟踪的子数组dataSelectedArray。主数据存储为数组的数组。

mainArray = [ [1,2,3],[3,4,2],[5,1,0] ];
dataSelectedArray=[];
for (var i=0; i<dataArray.length; i++) {
    if ( someLogic ) {
        dataSelectedArray.push(mainArray[i]);
    }
}

因此,dataSelectedArray保存着指向mainArray存储值的指针。后来,我需要用updatedData的数据替换mainArray来更新它。我需要dataSelectedArray也被更新。我可以想到两种方法来做到这一点:将每个迷你数组作为一个集合更新,或者更新每个组件。

var mainArray = [ [1,2,3],[3,4,2],[5,1,0] ];
var dataSelectedArray=[];
for (var i=0; i<mainArray.length; i++) {
    if ( i<2 ) {
        dataSelectedArray.push(mainArray[i]);
    }
}
	
updatedData = [ [ 1,0,0],[7,4,2] ];
for (var index= 0; index < updatedData.length; index++) {
    // this doesn't update dataSelectedArray
    mainArray[index] = updatedData[index];
}
console.log(mainArray[0]);
console.log(dataSelectedArray[0]);

var mainArray = [ [1,2,3],[3,4,2],[5,1,0] ];
var dataSelectedArray=[];
for (var i=0; i<mainArray.length; i++) {
	if ( i<2 ) {
		dataSelectedArray.push(mainArray[i]);
	}
}
	
updatedData = [ [ 1,0,0],[7,4,2] ];
for (var index= 0; index < updatedData.length; index++) {
	// this *does* update dataSelectedArray
	mainArray[index][0] = updatedData[index][0];
	mainArray[index][1] = updatedData[index][1];
	mainArray[index][2] = updatedData[index][2];
}
console.log(mainArray[0]);
console.log(dataSelectedArray[0]);

第一个方法不更新dataSelectedArray…为什么不呢?第二种方法是否有更短的(一行)方法?

当你这样做的时候:

dataSelectedArray.push(mainArray[i]);

dataSelectedArray包含对子数组的引用。这是而不是mainArray中原始引用来源的位置的引用。因此,重新分配mainArray[i]dataSelectedArray的值没有影响。

这和你有多个变量指向同一个数组没有什么不同:

var a = [1, 2, 3];
var b = a; // a and b now refer to the same array
b[1] = 6;
console.log(a[1]); // Outputs 6
b = [7, 8, 9]; // b now refers to a different array
console.log(a[1]); // Still 6 -- a hasn't been modified

相关内容

  • 没有找到相关文章