【发布时间】:2019-10-02 19:42:49
【问题描述】:
所以,我正在尝试这个 LeetCode 问题 = https://leetcode.com/problems/two-sum/
我编写的解决方案要求我对数组进行排序,但我需要返回与原始数组相关的索引。因此,我创建了一个常量来存储原始数据,然后在找到这些索引后进行搜索。
我的解决方案最终无法正常工作,因为排序方法正在改变该常量值。我不知道为什么会这样,我只知道 sort 方法在调用时会改变原始数组(这就是为什么我需要在排序之前存储它)。我认为如果 a 创建了一个常量,之后就无法更改它。这就是为什么我认为这是一个错误或什么的原因
这是我一直在尝试的代码(为了清楚起见,我将 console.logs 留在那里)
要测试你应该使用
nums = [3, 2, 4]
target = 6
var twoSum = function(nums, target) {
var max = nums.length - 1;
var min = 0;
const nums2 = nums;
console.log(nums2)
var nums1 = nums.sort(function(a,b){return a - b});
console.log(nums2)
while (min != max){
if (nums1[min] + nums1[max] > target) {
max -= 1;
} else if (nums1[min] + nums1[max] < target) {
min += 1;
};
if (nums1[min] + nums1[max] == target) {
return [nums2.indexOf(nums1[min]), nums2.indexOf(nums1[max])];
};
};
};
【问题讨论】:
-
嘿,谢谢!!这些很有帮助。我不认为它实际上是重复的,因为在那个线程中讨论的是通过声明将值重新分配给常量的问题。在我的示例中,如果 nums2 是常量,我不应该更改它的值。我并不是说我分配给 nums2 的内容不能更改,我认为这是另一个线程的主题。至少,我找不到它
-
你没有重新分配你的常量——它是一个数组,所以它是一个对象。改变一个对象是可能的,即使它是一个
const。您的nums和nums2是*同一个对象,而不是碰巧持有相同值的两个不同对象。 -
你没有改变 const 值,你改变了它引用的内容。
-
对我来说,发生这种情况很奇怪。这是我第一次发帖甚至登录,但我应该再研究一下,因为 VLAZ 发布的链接实际上可以解决我的问题...谢谢
标签: javascript arrays debugging