Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS find()无法处理对象数组_Javascript_Arrays - Fatal编程技术网

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;  });