首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么筛选函数在不传递条件的情况下返回数组

为什么筛选函数在不传递条件的情况下返回数组
EN

Stack Overflow用户
提问于 2022-09-17 11:47:27
回答 1查看 57关注 0票数 -1

我很难理解为什么这段代码不起作用。不过,它可以处理一个小数据集。

代码语言:javascript
运行
复制
const gl = wList.GreateLeague
const data = JSON.parse(fs.readFileSync("./raw/data.json"))
    
(function () {
  let glFinds = data.pokemons.filter((poke) => gl.hasOwnProperty(poke.pokemon_id))
  let ax = glFinds.filter((p) => {
    return gl[p.pokemon_id].stats.filter((ammo) => {
      return (
        p.attack === ammo[0] && p.defence === ammo[1] && p.stamina === ammo[2]
      );
    });
  });
  console.log(glFinds)
  console.log(ax)
})();

我对两个控制台的输出是相同的,因此ax上的过滤器不能工作。如果我包括testData.json,ax工作得很好,它比data.json小。

编辑:统计数据看起来像这样。在这里,1,2是进攻防守和耐力。

代码语言:javascript
运行
复制
"stats": [
          [1, 15, 15, 20.5, 1494],
          [0, 13, 11, 20.5, 1494],
          [2, 14, 15, 20.5, 1494],
          [0, 10, 15, 20.5, 1494],
          [1, 12, 11, 20.5, 1494],
          [0, 15, 15, 20.5, 1494],
          [3, 13, 15, 20.5, 1494],
          [0, 14, 10, 20.5, 1494],
          [2, 15, 14, 20.5, 1494],
          [0, 11, 13, 20.5, 1494]
        ],

我的数据文件有如下所示的对象数组:

代码语言:javascript
运行
复制
{
      "pokemon_id": 155,
      "attack": 2,
      "defence": 5,
      "stamina": 0,
      "move1": 209,
      "move2": 125,
      "level": 4,
    }

我试图过滤任何对象匹配(0,1,2索引)的统计数据数组,对象的攻击,防御和耐力必须匹配任何一个统计数据数组前3元素。

EN

回答 1

Stack Overflow用户

发布于 2022-09-17 11:58:58

filter中的函数必须返回truefalse,这取决于当前项是否包含在输出数组中。但是您的函数返回gl[p.pokemon_id].stats.filter(...),这是一个数组,正如Andreas已经指出的那样。

当试图将数组计算为truefalse时,它可以算作true (即使它是空的),因此您的整个filter过程实际上什么也不做。

代码语言:javascript
运行
复制
if ([]) console.log(true);
// true
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73754570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档