为啥让 .indexOf() 返回为 -1,尽管元素存在于数组中? [关闭]
Posted
技术标签:
【中文标题】为啥让 .indexOf() 返回为 -1,尽管元素存在于数组中? [关闭]【英文标题】: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,因此您正在查看一个不理想的对象列表
【参考方案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 存在与否,则返回 true
或 false
。
【讨论】:
【参考方案3】:检查变量的类型。 也许 req.params.a_id 在你的情况下是字符串(“1”)?
【讨论】:
以上是关于为啥让 .indexOf() 返回为 -1,尽管元素存在于数组中? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Javascript:当元素存在于数组中时,为啥 indexOf 函数返回 -1?
为啥 IndexOf 在匈牙利文化中找不到字符 N 与 Y 的组合?