首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我的.slice()方法变异原始数组(TypeScript)

我的.slice()方法变异原始数组(TypeScript)
EN

Stack Overflow用户
提问于 2022-11-21 02:40:39
回答 1查看 29关注 0票数 0

这是我第一次用TypeScript编写slice()方法。我知道slice()方法应该返回一个数组的副本。下面是代码的一些片段

代码语言:javascript
运行
复制
class ChapterOne {
    
    // Gauss Jordan Elimination
    // Notes: Only solve system of linear equation with one solution
    static gaussJordanElim( linsys : number[][] ) {
        const numOfEquation = linsys.length
        const numOfUnknown = linsys[0].length - 1
        if (numOfUnknown > numOfEquation) return 'This System of Linear Equation either have no solution or have infinite solutions'
        
        // I slice it here.
        const input = linsys.slice()
        const length = input.length
        // pointer = i, row to operate = j, column to operate = k
        for (let i = 0; i < length; i += 1) {
            if (input[i][i] === 0) return 'Mathematical Error! Cannot divide by zero'
            for (let j = 0; j < length; j += 1) {
                if (i !== j) {
                    const ratio = input[j][i] / input[i][i]
                    for (let k = 0; k < length + 1; k += 1) {
                        input[j][k] = input[j][k] - ratio * input[i][k]
                    }
                }
            }
        }
        // I Checked it here
        console.log(input)
        console.log(linsys)

        const output = input.map((row, pointer) => row[length] / row[pointer])
        return output
    }
}

简而言之,我复制了原始数组,对复制的数组做了大量操作,并且不想改变原始数组,但是当我同时复制和原始数组console.log时,原始数组也会改变。对此有什么明确的解释吗?

主要目标是复制原始数组,更改复制的数组,并维护原始数组。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-21 02:55:40

这是因为.slice做一个浅拷贝,而不复制嵌套对象。由于您使用的是二维数组,这是预期的。

用途:const input = JSON.parse(JSON.stringify(linsys))

浅克隆不复制嵌套对象。因此,如果一个对象包含一个对象,那么您的.slice将保留对该对象原始副本的引用,而不是创建一个副本。因此,值会发生变化。

如果是浅薄的拷贝-

Heap).

  • Primitive数据类型中的
  • 对象将反映原始位置的更改,因为它们被作为引用存储在原始位置(因为它们直接存储在调用堆栈中(在执行上下文中)。

例如:

代码语言:javascript
运行
复制
var a = [
    [1, 2],    // This still is referencing to the original reference 
    [5,7]
]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74513670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档