Javascript сумма двух чисел внутри массива печатать индекс чисел, сумма которых = цель

[https://drive.google.com/file/d/12qIWazKzBr1yJGpo1z106euXVJMKMwEa/view?usp=sharing][1]мне нужно найти индекс двух чисел, сумма которых = цель[число указано в качестве аргумента], я пытался решить это через цикл for, но я не получаю indexex правильно, как будто первые два числа массива равны 1,1, а цель установлена ​​​​как два, я получаю ответ как [0,0], но я хочу [0,1]

let arr = [1,1,8,9,7,22,6]




var twoSum = function(nums, target) {
    for(i=0;i<nums.length;i++){
        for(j=i+1;j<nums.length;j++)
        if (nums[i] + nums[j]==target){
           
            return [nums.indexOf(nums[i]) , nums.indexOf(nums[j])]
        }

    }
};
console.info(twoSum(arr, 2))
i am expecting output as [0,1]
but i am getting output as [0,0]


  [1]: https://i.stack.imgur.com/n1jo7.png

просто верни i и j..

Yash Mehta 07.12.2022 07:22

Не используйте indexof. Поскольку значение j в первый раз будет равно 1, а indexOf вернет самое первое вхождение 1 из массива.

HiddenOne1254 07.12.2022 07:26
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
2
56
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Внесенные изменения: - Просто измените оператор return.

Код:-

let arr = [1,1,8,9,7,22,6]
var twoSum = function(nums, target) {
    for(i=0;i<nums.length;i++){
        for(j=i+1;j<nums.length;j++)
        if (nums[i] + nums[j]==target){
            return [i,j]
        }

    }
};
console.info(twoSum(arr, 2))

Вывод:-

node /tmp/fiXkoJ2VkT.js
[ 0, 1 ]

Обратите внимание, допустим, вам нужна сумма 9. [0,2] и [1,2] оба суммируются, чтобы дать 9, но вывод будет [0,2] не [1,2], поскольку вы проверяете 1-й элемент во всех случаях, чем 2-й элемент во всех случаях и так далее..

Обновлен раздел .. {ваш запрос}

пусть arr = [2,5,5,11] для этого массива, если цель равна 10, он все еще возвращает [1,1], как я могу это исправить

Ankit kharola 07.12.2022 07:43

На моей стороне все работает нормально.. Вывод [1,2] показывает

Yash Mehta 07.12.2022 07:45

у меня все еще отображается как 1,1 я не знаю почему

Ankit kharola 07.12.2022 07:49

поделитесь своим скриншотом в вопросе ..

Yash Mehta 07.12.2022 07:50

см. мой обновленный раздел

Yash Mehta 07.12.2022 07:54

что это за условие для num[i]!==num[j] в вашем коде..

Yash Mehta 07.12.2022 07:55

Метод indexOf возвращает первое вхождение определенного значения. Поскольку у вас есть 1 в обоих индексах 0 и 1, он вернет только 0, потому что это первое вхождение 1.

Документация MDN

Просто верните i и j себя.

return [i, j];

пусть arr = [2,5,5,11] для этого массива, если цель равна 10, он все еще возвращает [1,1], как я могу это исправить

Ankit kharola 07.12.2022 07:44

пусть arr = [2,5,5,11] для этого массива, если цель равна 10, он все еще возвращает [1,1], как я могу это исправить

Ankit kharola 07.12.2022 07:55

let arr = [1, 1, 8, 9, 7, 22, 6];

function twoSum(arr, target) {
  for (let i = 0; i < arr.length; i++) {
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[i] + arr[j] === target) console.info([i, j]);
    }
  }
}

twoSum(arr, 2);

Другие вопросы по теме