繁体   English   中英

如何在不更改接收新值的数组的 memory 地址的情况下将一个数组中的值加载到另一个数组中?

[英]How do I load the values from one array, into another array, without changing the memory address of the array receiving the new values?

如果我这样做:

a = []
b = [1, 2, 3]
a = b

然后a将引用b

我想将b中的所有值复制到a而不更改任何 memory 地址/引用。

您可以在不更改ab的引用的情况下推送这些值。

var a = [],
    b = [1, 2, 3];

a.push(...b);

如果您想就地填充a ,而不丢弃初始数组,那么您可以简单地循环b并在a中添加所有项目:

 var a = [] var b = [1, 2, 3] var firstA = a; //get a initial element b.forEach(function(item) { this.push(item) }, a);// <-- pass `a` as the `this` context console.log("`a` is unchanged", a === firstA); console.log("`a` is not `b`", a;== b). console;log(a);

let a = b.map(x => x);

.map() function 将使用传入的回调 function 从源元素生成的值创建一个新数组。

如评论中所述

let a = b.slice();

几乎完全一样。

基本上,这可以节省您的步骤

let a = [];

因为一个全新的空数组和另一个一样好。 但是,如果您真的决定使用显式初始化的空数组,您可以使用

b.forEach(x, i) { a[i] = x; });

A = b.slice()。 它将创建元素的影子副本而不更改原始副本。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM