当前位置: 首页 > 知识库问答 >
问题:

筛选器返回数组的第一个元素,而不是

盖锐
2023-03-14

我正在为二和leetcode问题实现一个哈希映射。

const testArrs = {
    'first': [2,7,11,15],
    'second': [3,2,4],
    'third': [3,3]
}

function twoSum(nums, target) {
    let mapped = nums.map((item) => target - item);
    let returnedArr = mapped.filter((item) => {
        if (nums.includes(item)) {
            console.log(nums.indexOf(target-item))
            return nums.indexOf(target - item)
        }
    })

    console.log(returnedArr)
    //TODO check if returnedArr size == 2.

}

twoSum(testArrs['first'], 9)

映射的第一个数组创建一个散列数组作为“索引”,它是nums数组中每个元素的目标差异。然后,我对映射数组应用一个过滤器,以查看映射数组的2个元素是否包含在nums数组中,并返回这些元素的索引。

当索引被过滤到returnedArr中时,它似乎返回nums的第一个元素,而不是两个索引。[2] 返回之前的日志记录显示它正确地分别注册了索引0和1,而不是[0,1]。

共有2个答案

羊毅庵
2023-03-14

基本上<代码>返回nums。如果索引为0,则indexOf(target-item)结果为false。相反,您需要检查是否为nums。indexOf(目标-项目)

但是,数组#过滤器并不是您真正想要的:

filter()方法创建一个新数组,其中包含通过所提供函数实现的测试的所有元素。

相反,您需要使用映射来保存数字索引对,然后检查映射中是否有补码:

function twoSum(nums, target) {
  const map = new Map();
  for (let i = 0; i < nums.length; i++) {
    map.set(nums[i], i);
  }
  for (let i = 0; i < nums.length; i++) {
    const complement = target - nums[i];
    if (map.has(complement) && map.get(complement) != i) {
      return [i, map.get(complement)];
    }
  }
}

const testArrs = { 'first': [2,7,11,15], 'second': [3,2,4], 'third': [3,3] };
console.log( twoSum(testArrs['first'], 9) );
司徒修能
2023-03-14

这是因为您将过滤器和map函数混合在一起。map函数必须返回布尔值(这将创建符合条件的目标数组)。在获得这些值之后,在您的例子中,就是NUM中包含的值,您将它们映射到索引中。这样地:

const testArrs = {
    'first': [2,7,11,15],
    'second': [3,2,4],
    'third': [3,3]
}

function twoSum(nums, target) {
    let mapped = nums.map((item) => target - item);
    let returnedArr = mapped.filter((item) => {
        return nums.includes(item)
    })
    return returnedArr.map((item)=> nums.indexOf(target-item))

}

console.log(twoSum(testArrs['first'], 9))`
 类似资料:
  • 如何移除第一个数组但返回减去第一个元素的数组 在我的示例中,当删除第一个元素时,我应该得到

  • 出于某种原因,将索引放入XPath将返回整个对象数组,而不是索引处的对象数组 超文本标记语言 我正在研究的超文本标记语言如下所示: HTML的屏幕截图 我想做什么 我正试图根据复选框编写硒测试。选中叶复选框只应选中该叶复选框,选中父复选框还应选中子复选框。 我的XPath选择器 在该代码中,为了便于XPath选择器的编写,我在开发人员控制台中的一个字段上放置了一个ID。尤其是这个: 在包含所需内容

  • 返回数组中除第一个元素外的所有元素。 如果数组的 length 大于 1 ,则返回 Array.slice(1),否则返回整个数组。 const tail = arr => (arr.length > 1 ? arr.slice(1) : arr); tail([1, 2, 3]); // [2,3] tail([1]); // [1]

  • 我想了解从另一个数组的所有元素中筛选一个数组的最佳方法。我尝试了筛选函数,但我不知道如何给它我想要删除的值。 类似内容: 如果过滤器功能不是有用的,你将如何实现它? 编辑:我检查了可能重复的问题,对于那些容易理解javascript的人来说,它可能很有用。如果答案被检查为好,事情就会变得简单。

  • 在这个可爱的星期一早上,我可能没有喝足够的咖啡,但有件简单的事我想做,但我不想做。 我在一组对象上筛选id: 如果存在匹配项,则返回长度为1的数组。我有以下几行: 我希望不必检查数组的第一个元素,而是只返回调用过滤器的对象,而不是数组中的对象。 为了更加清楚,skuVariant返回以下内容: 我希望它返回这个: 使用lodash utils是可能的,但这太过分了。我想买香草的。 有没有ES7、E

  • 我有以下数组: 我的JsonPath表示法是这样的:。我希望它返回1(因为它与一本书匹配),但它返回2,这是第一个对象(匹配)中的键数。我如何强制/更改它以返回元素数,而不是对象中的键数? 我使用这个库为java。