JS find() 不适用于对象数组

The*_*oor 5 javascript arrays

我有一个数组,clients我想array.find()在其上运行。该数组包含对象,通常看起来像这样:

[ { customId: 'user1', clientId: 'TPGMNrnGtpRYtxxIAAAC' },
  { customId: 'user2', clientId: 'G80kFbp9ggAcLiDjAAAE' } ]
Run Code Online (Sandbox Code Playgroud)

这是我遇到问题的地方。我试图用它来find()查看数组中的任何对象(或对象的一部分)是否与某个变量 匹配,recipient该变量通常包含类似 的值user1。我用来执行此操作的代码是:

function checkID(recipient) {
       return recipient;
        }
    var found = clients.find(checkID);
Run Code Online (Sandbox Code Playgroud)

这始终返回数组中的第一个对象。我是否使用find()错误,或者有更好的方法来做到这一点?

Ara*_*edi 5

find采用谓词(如果 item 匹配则返回 true 的函数,如果 item 不匹配则返回 false)。

const arr = [ { customId: 'user1', clientId: 'TPGMNrnGtpRYtxxIAAAC' },
              { customId: 'user2', clientId: 'G80kFbp9ggAcLiDjAAAE' } ]

const result = arr.find(item => item.customId === 'user1')
                             // ^^^^^^^^^^^^^^^^^^^^^^^^^ 
                             // This should evaluate to true for a match and to false for non-match
Run Code Online (Sandbox Code Playgroud)

您始终获得数组的第一项的原因是因为您的checkId函数返回的结果为true. 因此,第一个项目被评估并产生真实的结果,因此它被选为第一个匹配项。


如果不熟悉 lambda 语法() => {},那么该行类似于:

const result = arr.find(function (item) { return item.customId === 'user1' })
Run Code Online (Sandbox Code Playgroud)