Javascript JS find()无法处理对象数组
我有一个数组,Javascript JS find()无法处理对象数组,javascript,arrays,Javascript,Arrays,我有一个数组,clients,我想在上面运行array.find()。此数组包含对象,通常如下所示: [ { customId: 'user1', clientId: 'TPGMNrnGtpRYtxxIAAAC' }, { customId: 'user2', clientId: 'G80kFbp9ggAcLiDjAAAE' } ] 这就是我遇到问题的地方。我试图使用find()查看数组中是否有任何对象(或对象的一部分)与某个变量recipient匹配,该变量通常包含一个类似user1的值
clients
,我想在上面运行array.find()
。此数组包含对象,通常如下所示:
[ { customId: 'user1', clientId: 'TPGMNrnGtpRYtxxIAAAC' },
{ customId: 'user2', clientId: 'G80kFbp9ggAcLiDjAAAE' } ]
这就是我遇到问题的地方。我试图使用find()
查看数组中是否有任何对象(或对象的一部分)与某个变量recipient
匹配,该变量通常包含一个类似user1
的值。我使用的代码是:
function checkID(recipient) {
return recipient;
}
var found = clients.find(checkID);
这将始终返回数组中的第一个对象。我使用的
find()
是错误的,还是有更好的方法呢?find
使用谓词(如果项匹配,则返回true;如果项不匹配,则返回false)
之所以一直获取数组的第一项,是因为checkId
函数返回的值为true
。因此,对第一个项目进行评估并生成一个truthy结果,因此它被选为第一个匹配项
如果不熟悉lambda语法
()=>{}
,则该行类似于:
const result = arr.find(function (item) { return item.customId === 'user1' })
您正在使用查找错误。
如果recipient包含有关目标值的信息,则应使用其他名称命名checkID的第一个参数。并将其任何属性与收件人进行比较
var found = clients.find(function(element) { return element.prop1 === recipient.anyProp; });
要检查数组中的对象是否存在特定的
customId
,请将正在搜索的值放入对象中,然后将该对象传递给find()
:
让客户端=[{
customId:“user1”,
客户ID:“TPGMNRNGTPRYT2XIAAC”
},
{
customId:“user2”,
客户ID:“G80kFbp9ggAcLiDjAAAE”
}
];
功能检查ID(el){
返回el.customId==this.param;
}
let found=clients.find(checkID,{param:“user1”});
控制台信息(已找到)
recipient
指的是对象,因此return recipient
将始终产生true
结果,这意味着通过find()
的第一次迭代将返回true
并停止。你想查什么?例如,您可能需要类似于“返回收件人”的内容。clientId==clientdvariable。@TylerRoper抱歉,我在完成之前无意中发布了这个问题:/find
接受一个函数,该函数从数组接收一个元素,并返回一个布尔值,指示该元素是否与条件匹配。您的checkId
函数总是返回它接收到的元素,该元素被转换为布尔值,只要元素本身不是falsy(false,null,0,undefined),那么它总是返回第一个元素就不足为奇了。如果匹配,函数必须返回true,如果不匹配,函数必须返回falsematch@TylerRoper正确的,我最初误读了OPs代码。多亏了你的提示,我编辑了回复。谢谢:)
var found = clients.find(function(element) { return element.prop1 === recipient.anyProp; });