var myFirstArray = [{letter: 'a'}, {letter: 'b'}, {letter: 'c'}];
我想做出myFirstArray的引用,所以我这样做:
var mySecondArray = myFirstArray;
推,拼接,修改元素在myFirstArray中将显示在mySecondArray中,但是如果我想将该数组重置为其他值:
myFirstArray = [];
或
myFirstArray = someOtherData;
我的参考文献丢失了。我明白这是为什么,但我希望mySecondArray
可以随时指向任何myFirstArray
指向的地方。什么是最好的方法来做到这一点?
我的解决方法包括:
// Just empty the array and push it:
while (myFirstArray.length) myFirstArray.pop();
for (var x in data) myFirstArray.push(x);
// Or put the array in an object:
var viewBag = {};
viewBag.myFirstArray = [...];
var mySecondArray = viewBag.myFirstArray;
我不喜欢这两个选项:(
编辑:考虑另外一种情况:
function doSomethingToMyArray (theArray) {
// Say I get new data that will be formatted the way I want it to be
// Shouldn't I be allowed to do this?
var myNewData = [{ letter: 'd' }];
theArray = myNewData;
}
var myFirstArray = [{letter: 'a'}, {letter: 'b'}, {letter: 'c'}];
doSomethingToMyArray (myFirstArray);
// At this point, myFirstArray will still be a, b, c instead of d
'myFirstArray.length = 0;'会清除你的两个数组,如果这是所有你需要做的。如果你想完全替换内容,那么:'myFirstArray.length = 0; myFirstArray.push.appy(myFirstArray,someOtherData);'。这些都会影响'mySecondArray',只要你让它引用'myFirstArray'就像你的问题所暗示的那样。 – DRobinson 2015-02-06 17:28:23
Javascript没有变量引用。它只有对象和数组的引用。 – Barmar 2015-02-06 17:29:13
Barmar,ok - 那么你是说当Bar指向一个新的数组/对象时,没有办法将引用Foo保存到数组/对象Bar中? – 2015-02-06 17:41:58