почему функция JavaScript возвращает неопределенное значение?

#javascript #arrays #undefined

#javascript #массивы #не определено

Вопрос:

twoSum, должен возвращать индексы целых чисел, которые в сумме составляют цель: Ввод: nums = [2,7,11,15], target = 9 Вывод: [0,1] Вывод: поскольку nums[0] nums[1] == 9, мы возвращаем [0, 1] .

Я новичок в JavaScript и не понимаю, почему это возвращает undefined. После нескольких тестов я заметил, что он даже не входит во 2-й forloop, однако, когда я написал это на python, он работает отлично

 var twoSum = function(nums, target) {
  for (let i = 0; i < nums.length; i  ) {
    if (nums[i] >= target) {
      continue;
    }
    for (let j = i; j < nums.legth; j  ) {
      if (nums[j] >= target) {
        continue;
      }
      if (nums[i]   nums[j] === target) {
        const ans = [i, j]
        return ans;
      }
    }
  }
};
console.log(twoSum([2,7,11,15],9));  

любая помощь будет оценена

Комментарии:

1. у вас есть отрицательные значения в массиве?

2. Да, у вас могут быть отрицательные значения в массиве. Но даже в этом случае он не входит во 2-й цикл

Ответ №1:

Вы допустили опечатку. Исправьте legth length во втором цикле.

 var twoSum = function (nums, target) {
      for (let i = 0; i < nums.length; i  ) {
        if (nums[i] >= target) {
          continue;
        }
        for (let j = i; j < nums.length; j  ) {
          if (nums[j] >= target) {
            continue;
          }

          if (nums[i]   nums[j] === target) {
            const ans = [i, j];
            return ans;
          }
        }
      }
    };

    console.log(twoSum([2, 7, 11, 15], 9));  

Комментарии:

1. @Noa Yesa Moshesa, можете ли вы принять этот ответ, если он работает?

2. для ввода данных [2, 7, 11, 15], 9 => результат должен быть [0,1], так как вы добавляете 2 7, чтобы получить 9, и они являются местами в индексе 0 и 1

Ответ №2:

Я вижу, что это старый вопрос, но все же…

У вас есть вложенные циклы, и это может быть очень запутанным. Один из способов, который я бы посоветовал вам изучить, — это определить ваши переменные в основной области действия функции, потому что иначе вы ничего не возвращаете;

Но я бы предпочел посоветовать вам использовать Array.reduce(), как это принято в настоящее время. Вот мое решение в leetcode:

 var twoSum = function(nums, target) {

let acc = nums.reduce((acc, curr, currIndex, array) => {
    array.forEach((number, index) => {
        
        if(number   curr === target amp;amp; index !== currIndex) {
            acc = [currIndex, index];
        }
    })
    
    return acc;
}, []);

return acc.sort();

};