javascript 我试图找到数组中某些元素的索引,但我重新定义了数组以获得所述元素,如果我复制了一个副本,它也会被重新定义

sz81bmfz  于 2023-01-24  发布在  Java
关注(0)|答案(1)|浏览(112)

我正在解决javascript中的leetcode TwoSum问题,我做了一个搜索算法,它会改变nums数组,直到第一个和最后一个索引是正确的数字,然后我尝试在改变之前搜索nums数组的原始值,以找到原始数组中正确数字的索引。但问题是当我修改第一个数组时,保存的副本数组被重新定义了,这样我就不能检查它并找到正确的索引,我试着将原始数组定义为一个函数甚至一个类,但都不起作用;我怎么才能不让它改变呢

const searchAlgorithm = (nums, target) => {
    nums = nums.sort((a, b)=>a-b);
    while(true){
        total = nums[0]+nums[nums.length-1];
            if(total>target){
                nums.splice(nums.length-1, 1);
            }
            else{
                if(total==target){
                    answers = [nums[0], nums[nums.length-1]];
                    return answers;
                }
                else{
                    nums.splice(0, 1);
                }
            }
    }
}

const twoSum = (nums, target)=>{
    original = nums;
    [num1, num2] = searchAlgorithm(nums, target);
    answers = [original.indexOf(num1, 0), original.indexOf(num2, 0)];
    return (answers);
}

console.log(twoSum([3,6,8,2,11], 5));
4c8rllxm

4c8rllxm1#

当你做original = nums时,它只给你2个名字,但是两个都指向相同的数组(相同的内存位置),因此改变一个将改变另一个。为此你需要做数组的深度复制(深度克隆)。original = someDeepCopyFunction(nums)

相关问题