【问题标题】:Why getting .indexOf() return as -1, although element exists in the array? [closed]为什么让 .indexOf() 返回为 -1,尽管元素存在于数组中? [关闭]
【发布时间】:2019-06-08 14:33:14
【问题描述】:

“addresses”是一个对象数组,每个对象元素都有特定的_id。
我试图在 idsArray 中找到 .indexOf(req.params.a_id) (这是数组中所有这些对象元素的 id 数组),但 .indexOf() 返回-1 虽然 _id 存在于 idsArray 中。

code snapshot!

【问题讨论】:

  • 您好,欢迎来到 SO。请在minimal reproducible example 中包含实际代码,而不是代码图片
  • 请在此处提交MCVE,而不仅仅是代码截图。在尝试复制它时,您最终可能会发现问题所在。您可能正在尝试比较两种不同的类型或其他东西。
  • 我的第一个想法是,您正在 addresses 数组中查找一个数组元素,其值等于 req.params.a_id 属性中保存的值。
  • 这些不是您自己的对象,您使用的是 Mongoose 或类似的东西。 _id 字段本质上不是一个字符串,它是一个具有 .toString() 方法的对象,该方法打印一个 id,因此您正在查看一个不理想的对象列表

标签: javascript express mongoose


【解决方案1】:

我认为 .indexOf 是用在字符串中最多的,你可以通过这种方式获取:

idsArray.filter(x => x.id == req.params.a_id)

这将返回一个包含匹配元素的数组。

参考:https://www.w3schools.com/jsref/jsref_filter.asp

更新: 找到可以使用的索引

idsArray.findIndex(x=> x == req.params.a_id)

【讨论】:

  • idsArray 是否持有具有id 属性的对象?
  • 在我的例子中是的。 idsArray = [{id:1, name: 'Freddy'}, {id:2, name: 'Ethan'}] 您可以按任何其他属性进行过滤
  • 你怎么知道的?根本没有什么可以暗示的。事实上,根据代码截图,这是非常不真实的,因为数组是通过映射到另一个数组来获取对象的 ID 而创建的。编辑:你从哪里得到这个数组?!
  • 我不知道 idsArray 包含什么对象,我只是给他一个例子,如果 idsArray 是这样的数组 [{id:1, name: 'Freddy'}, {id:2, name : 'Ethan'}] 所以我的方法是正确的,如果 idsArray 是这样的数组 [1,2,3,4] 方法将是 idsArray.filter(x => x == req.params.a_id)跨度>
  • addresses 数组是一个对象数组,每个对象元素都包含唯一的 _id 属性,我只是从每个对象元素中提取这些 _id 并将其存储在 idsArray 中以便我可以找到indexOf 来自req.params.a_id_id 之一
【解决方案2】:

要检查一个元素是否存在于数组中,您可以使用some 方法:

idsArray.some(id => id === req.params.a_id)

如果 id 存在与否,则返回 truefalse

【讨论】:

    【解决方案3】:

    检查变量的类型。 也许 req.params.a_id 在你的情况下是字符串(“1”)?

    【讨论】:

      猜你喜欢
      • 2020-09-28
      • 1970-01-01
      • 2012-01-25
      • 2017-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多