tengo este problema:
Dada una matriz de enteros
numsy untargetentero, devuelve los índices de dos números que suman eltarget.
Ejemplo 1:
Input: nums = [2,7,11,15], target = 9 Output: [0,1] Output: Because nums[0] + nums[1] == 9, we return [0, 1]. Con el siguiente código, pude obtener los valores agregados en una matriz usando set y Map
Lo que necesito ayuda es devolver los indices
const arr = [{key1: 2}, {key1: 7}, {key1: 11}, {key1: 15}]; const k = 9; const valueSet = new Set(arr.flatMap((x) => Object.values(x))); const valueArray = [...valueSet]; valueArray.forEach((v1, i1) => { for (let i2 = i1 + 1; i2 < valueArray.length; i2++) { if ((v1 + valueArray[i2]) === k) { // Return the indices return valueArray[i2]; } } });Tienes que analizar y encontrar la combinación de índices que te da la suma.
El siguiente código te ayudará
const arr = [{ key1: 2 }, { key1: 7 }, { key1: 11 }, { key1: 15 }]; const k = 9; let valueSet = new Set(arr.flatMap((x) => Object.values(x))); let valueArray = [...valueSet]; let indices; let isFound = false; // valueArray.forEach((v1, i1) => { for (let i1 = 0; i1 < valueArray.length && !isFound; i1++) { for (let i2 = i1 + 1; i2 < valueArray.length && !isFound; i2++) { if ((valueArray[i1] + valueArray[i2]) === k) { //Return the Indices indices = [i1, i2]; isFound = true;; } } } console.log(indices);La respuesta proporcionada por Nitheesh funciona bien. En cuanto a una explicación de por qué su enfoque inicial no tuvo éxito:
El uso de forEach para iterar sobre una matriz es diferente al uso de bucles for tradicionales, ya que se llama a la función de devolución de llamada para cada elemento de la matriz. El uso de return en un bucle forEach simplemente se sale de la devolución de llamada de ese elemento en particular , pero no de toda la iteración (por lo tanto, un return en un bucle forEach se comporta de manera similar a continue en un bucle for (...) .
Puedes leer más sobre esto aquí .
Primero necesita obtener la matriz con los valores de su matriz con claves [{key1: 2},{key1: 7},{key1: 11},{key1: 15}]; . Luego, recorre la matriz de valores y devuelve el índice si la condición (nums[i] + nums[j] == target) => (7 + 2 == 9) es verdadera.
const arr = [{key1: 2},{key1: 7},{key1: 11},{key1: 15}]; const k = 9; nums = arr.map((o) => { return Object.values(o)[0] }) const twoSum = (nums, target) => { for(let i = 0; i < nums.length; i++){ for(let j = i+1; j < nums.length; j++){ if(nums[i] + nums[j] == target){ return [i, j] } } } }; console.log(twoSum(nums, k))