Codewars javascript任务-帮助理解

Codewars javascript任务-帮助理解,javascript,Javascript,我正在接受一项调查: 给定一个整数列表和一个求和值,返回前两个 值(请从左边解析)按相加的外观顺序排列 形成总和。 例如: 你认为整对“更早”是什么意思?如果它的索引之和最小,则IMO。现在基于此假设,我制定了解决方案,但有一次测试失败: var sum\u pairs=函数(ints,s){ 设i=0; 设pair=[0,0]; 设ind=[100100] 让发现=错误; 函数循环(一){ if(i>ints.length)返回对; 整数切片(i).forEach((当前,idx)=>{ 整

我正在接受一项调查:

给定一个整数列表和一个求和值,返回前两个 值(请从左边解析)按相加的外观顺序排列 形成总和。 例如:

你认为整对“更早”是什么意思?如果它的索引之和最小,则IMO。现在基于此假设,我制定了解决方案,但有一次测试失败:

var sum\u pairs=函数(ints,s){
设i=0;
设pair=[0,0];
设ind=[100100]
让发现=错误;
函数循环(一){
if(i>ints.length)返回对;
整数切片(i).forEach((当前,idx)=>{
整数切片(i+1).some((num,i)=>{
设sum=curr+num;
设prevIndicies=ind[0]+ind[1];
如果(总和===s&&prevIndicies>idx+i){
ind=[idx,i];
pair=[curr,num];
发现=真;
返回true;
}
})
})
i+=1;
环路(一)
}
循环(0)
如果(找到){
返回对
}
返回未定义;
}

log(sum_pairs([1,4,8,7,3,15],8))
这意味着从左到右取第一个匹配对,因为7是创建对(从左)的第一个元素,所以3和7是第一对

我会更容易地解决它:

function sum_pairs(arr, target) {
    let old = [];
    let result = [];
    arr.some((el) => {
        let found = old.find((oldEl) => oldEl + el === target);
        if (found) return result = [found, el];
        old.push(el);
    })
    return result;
}

sum_pairs([10, 5, 2, 3, 7, 5], 10);

编辑:解释。我在数组中的所有元素上循环,搜索匹配项,然后返回我传递的所有元素。如果我找到一个匹配项,我会记住它并通过返回一个“truthy”值来打破循环。(这就是.some()的工作原理。)最后,如果我没有找到匹配的元素,我会将该元素添加到我的旧元素列表中,然后继续下一个元素。

这意味着从左到右取第一对匹配的元素,因为7是创建一对(从左开始)的第一个元素,3和7是第一对

我会更容易地解决它:

function sum_pairs(arr, target) {
    let old = [];
    let result = [];
    arr.some((el) => {
        let found = old.find((oldEl) => oldEl + el === target);
        if (found) return result = [found, el];
        old.push(el);
    })
    return result;
}

sum_pairs([10, 5, 2, 3, 7, 5], 10);

编辑:解释。我在数组中的所有元素上循环,搜索匹配项,然后返回我传递的所有元素。如果我找到一个匹配项,我会记住它并通过返回一个“truthy”值来打破循环。(这就是.some()的工作原理。)最后,如果没有找到匹配项,我会将该元素添加到旧元素列表中,然后继续下一个元素。

我很确定这意味着他们希望第二个元素在列表中尽可能向左。比如说,

l5= [10, 5, 2, 3, 7, 5];
当试图找到10的和时,所需的输出为

[3, 7]
[10, 5, 2, 3, 7, 5];
           ^  ^
而不是

[5, 5]
[10, 5, 2, 3, 7, 5];
     ^           ^
因为
[3,7]
中的最后一个元素7位于第二个5之前

此代码似乎通过了所有测试用例-以三角形方式迭代,从标记开始
[0,1]
[0,2]
[1,2]
[0,3]
[1,3]
[2,3]
,…:

const sum_pairs = function(ints, s){
  const { length } = ints;
  for (let i = 1; i < length; i++) {
    for (let j = 0; j < i; j++) {
      if (ints[i] + ints[j] === s) return [ints[j], ints[i]];
    }
  }
}
const sum\u pairs=函数(ints,s){
常量{length}=ints;
for(设i=1;i
const sum\u pairs=函数(ints,s){
常量{length}=ints;
for(设i=1;ilog(sum_pairs(l8,10))
我很确定这意味着他们希望列表中的第二个元素尽可能向左。比如说,

l5= [10, 5, 2, 3, 7, 5];
当试图找到10的和时,所需的输出为

[3, 7]
[10, 5, 2, 3, 7, 5];
           ^  ^
而不是

[5, 5]
[10, 5, 2, 3, 7, 5];
     ^           ^
因为
[3,7]
中的最后一个元素7位于第二个5之前

此代码似乎通过了所有测试用例-以三角形方式迭代,从标记开始
[0,1]
[0,2]
[1,2]
[0,3]
[1,3]
[2,3]
,…:

const sum_pairs = function(ints, s){
  const { length } = ints;
  for (let i = 1; i < length; i++) {
    for (let j = 0; j < i; j++) {
      if (ints[i] + ints[j] === s) return [ints[j], ints[i]];
    }
  }
}
const sum\u pairs=函数(ints,s){
常量{length}=ints;
for(设i=1;i
const sum\u pairs=函数(ints,s){
常量{length}=ints;
for(设i=1;ilog(sum_pairs(l8,10))
这是一个非常糟糕的问题。你能给我一个提示吗?对我来说似乎很好,因为如果找到结果,一些
会停止循环数组,尽管
forEach仍然可以继续,所以这里可能是一个需要改进的地方我知道它看起来很丑。这就是我所能想到的…对不起,我不是指你的问题,这很好,我是说codewars问题措辞很糟糕(你必须在这里发帖才能弄清楚这一点就证明了-是的,不清楚他们的意思)我读到的是“整对都是更早的”这句话指的是3,和7都是在数组中首先遇到的,早于按照说明从左边解析数组时遇到的两个5。我同意@PaulCurtis的观点,答案是在数组中遇到的第一对