JavaScript 作用域(将一个数组复制到另一个数组)

标签 javascript arrays

在此代码中... mapObj.fetchTimeObjs 不应更改,对吧?!?!
不知怎的,当这个函数运行时,mapObj.fetchTimeObjs会发生变化:

function clockErasePast(){
    var now = new Date().getTime();
    var tmpFetchTimeObjs = [];
    for(var i =0; i<mapObj.fetchTimeObjs.length; i++){
        tmpFetchTimeObjs.push(mapObj.fetchTimeObjs[i]);
        if(mapObj.fetchTimeObjs[i].start < now){tmpFetchTimeObjs[i].start = now;}
    }
    return tmpFetchTimeObjs;
}

最佳答案

tmpFetchTimeObjs[i] 将仅包含对 mapObj.fetchTimeObjs[i] 的引用。

如果您要更改 tmpFetchTimeObjs[i]mapObj.fetchTimeObjs[i] 也会更改,因为您只有一个具有两个引用的对象。如果它从一个引用发生更改,那么第二个引用也将发生更改。

让我们考虑一个具有两个引用的对象。在这里,我从一个引用更改对象,并获取第二个引用的更新,因为它们引用同一个对象。

var objA = { name: 'Bob', age: 25};
var objB = objA;

objB.age = 30;

console.log(objA.age);

要获得独立的对象,您需要创建它们。您可以使用Object.assign()函数,它将任何可枚举属性复制到目标(第一个参数)对象中并返回它。

您可以使用以下方式创建

var obj = Object.assign({}, mapObj.fetchTimeObjs[i]);
tmpFetchTimeObjs.push(obj);

关于JavaScript 作用域(将一个数组复制到另一个数组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41648892/

相关文章:

javascript - 可以要求 Javascript 吗?

javascript - 如何测试抛出新的错误JavaScript

arrays - puppet 在循环中添加数组元素

javascript - 加入数组中的元素并从数组中删除一些元素

python - 比较列表理解和显式循环(3 个数组生成器比 1 个 for 循环更快)

javascript - Javascript 的数组方法 valueOf 的用途是什么?

javascript - 解构嵌套对象

javascript - 如何在Javascript中从二维数组中过滤重复的整数和字符串子数组

javascript - 多个宽度同时动画,达到100%

javascript - 将 JSON 操作为可观察数组集合