Javascript js中的两个for循环。无法在嵌套for循环上工作

Javascript js中的两个for循环。无法在嵌套for循环上工作,javascript,for-loop,nested-for-loop,Javascript,For Loop,Nested For Loop,我正在解决下面的一个问题,但不确定为什么我的第二个for循环会执行console.log任何操作。我当前得到一个结果[],当我处理循环时,我有时会感到困惑,因为输出返回空结果。那么为什么我的第二个for循环没有执行,为什么我不能将结果推送到结果数组 给定一个整数数组nums和一个整数目标,返回两个数字的索引,使它们相加到目标。您可以假设每个输入将有一个解决方案,并且不能使用同一元素两次。您可以按任意顺序返回答案 例1: 输入:nums=[2,7,11,15],target=9 输出:[0,1]

我正在解决下面的一个问题,但不确定为什么我的第二个for循环会执行console.log任何操作。我当前得到一个结果[],当我处理循环时,我有时会感到困惑,因为输出返回空结果。那么为什么我的第二个for循环没有执行,为什么我不能将结果推送到结果数组

给定一个整数数组nums和一个整数目标,返回两个数字的索引,使它们相加到目标。您可以假设每个输入将有一个解决方案,并且不能使用同一元素两次。您可以按任意顺序返回答案

例1: 输入:nums=[2,7,11,15],target=9 输出:[0,1] 输出:因为nums[0]+nums[1]==9,所以我们返回[0,1]

功能a(nums,目标){
让结果=[];
for(设i=0;i
只返回数组的长度,尝试如下操作

function a(nums, target) {

    let result = [];

    for (let i = 0; i < nums.length; i++){


        let firstNum = nums[i];

        console.log("i", i)

        for (let j = i + 1; j < nums.length; j++){

            console.log("j", j)
            let secondNum = nums[j];

            let sum = firstNum + secondNum;



            if (sum === target) {
                result.push(i, j);
                return result;
            }
        } 
    }
    return result; 
};

let result = a([2,7,11,15], 9);
console.log(result);
功能a(nums,目标){
让结果=[];
for(设i=0;i
只返回数组的长度,尝试如下操作

function a(nums, target) {

    let result = [];

    for (let i = 0; i < nums.length; i++){


        let firstNum = nums[i];

        console.log("i", i)

        for (let j = i + 1; j < nums.length; j++){

            console.log("j", j)
            let secondNum = nums[j];

            let sum = firstNum + secondNum;



            if (sum === target) {
                result.push(i, j);
                return result;
            }
        } 
    }
    return result; 
};

let result = a([2,7,11,15], 9);
console.log(result);
功能a(nums,目标){
让结果=[];
for(设i=0;i
除了返回
result.push(i,j)
的结果之外,您的代码实际上是正确的。push(i,j)返回数组的长度

使用
result.push(i,j)
然后
返回结果


而不仅仅是
返回result.push(i,j)

除了返回
result.push(i,j)
的结果之外,您的代码实际上是正确的。push(i,j)
返回数组的长度

使用
result.push(i,j)
然后
返回结果


而不仅仅是
返回result.push(i,j)

考虑将问题分解为更小的部分-

  • t
    生成唯一的数字组合
  • a
    通过生成器搜索第一个有效的解决方案
函数*t(n,i=0,p=[]) {if(p.length>=2) 产量p 如果(i>=n.length),则为else 返回 其他的 (收益率*t(n,i+1,[…p,n[i]] ,收益率*t(n,i+1,p) ) } 函数a(n,q)
{对于t(n)的(const[a,b])//考虑将问题分解成更小的部分-

  • t
    生成唯一的数字组合
  • a
    通过生成器搜索第一个有效的解决方案
函数*t(n,i=0,p=[]) {if(p.length>=2) 产量p 如果(i>=n.length),则为else 返回 其他的 (收益率*t(n,i+1,[…p,n[i]] ,收益率*t(n,i+1,p) ) } 函数a(n,q)
{for(const[a,b]of t(n))//您将获得两个console.log…一个用于i,一个用于j-因此这两个console.log每次发生一次-
返回结果。push(i,j);
意味着您在推之后返回新长度的结果(在本例中为2)-并退出函数(因为您返回了)-您想做的是删除该返回,这样您将得到两个console.logs…一个用于i,一个用于j-因此这两个console.logs每次发生一次-
返回结果。push(i,j);
意味着您在推后返回新长度的结果(在本例中为2)-并退出该函数(因为您返回了)-你想做的是删除该返回,这样你会很好-这仍然会提前停止过程-我相信目的是找到满足条件的所有组合…即,在循环中不需要返回,但问题是,两个数字的返回指数,这样它们加起来就是目标在这种情况下有一个解决方案…w如果目标可以通过两种方式实现-这是我能想到的推进数组的唯一原因:p-我不是在批评你的答案-我以不同的方式解读意图,仅此而已-我的意思是,你可以
返回[I,j]
,右:p@zzzzou
j
循环的迭代必须持续到
j
而不是直到
j
。这仍然会提前停止过程-我相信目的是找到满足条件的所有组合…即循环内不需要返回,但问题是,返回指数o这两个数字加起来就是目标在这种情况下有一个解决方案…如果目标可以通过两种方式实现-这是我认为可以推到一个数组的唯一原因:p-我不是在批评你的答案-我以不同的方式理解意图,仅此而已-我的意思是,你可以
返回[I,j]
,右:p@zzzzou
j
循环的迭代必须持续到
j
且不持续到
j