簡體   English   中英

JS find() 不適用於對象數組

[英]JS find() not working on array of objects

我有一個數組clients ,我想在其上運行array.find() 該數組包含對象,通常看起來像這樣:

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

這是我遇到問題的地方。 我正在嘗試使用find()來查看數組中的任何 object (或對象的一部分)是否與某個變量recipient匹配,該變量通常包含類似user1的值。 我用來執行此操作的代碼是:

function checkID(recipient) {
       return recipient;
        }
    var found = clients.find(checkID);

這總是返回數組中的第一個 object。 我使用find()錯誤,還是有更好的方法來做到這一點?

find接受一個謂詞(一個 function 如果 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

您一直獲得數組的第一項的原因是因為您的checkId function 返回的結果為true 因此,第一個項目被評估並產生一個真實的結果,因此它被選為第一個匹配項。


如果不熟悉 lambda 語法() => {} ,則該行類似於:

const result = arr.find(function (item) { return item.customId === 'user1' })

您正在使用查找錯誤。 如果收件人包含有關目標值的信息,您應該使用不同的名稱命名 checkID 的第一個參數。 並將它的任何屬性與接收者進行比較。

var found = clients.find(function(element) { return element.prop1 === recipient.anyProp;  });

要檢查數組中的對象是否存在某個customId ,請將您要搜索的值放在 object 中,然后將該 object 傳遞給find()

 let clients = [{ customId: "user1", clientId: "TPGMNrnGtpRYtxxIAAAC" }, { customId: "user2", clientId: "G80kFbp9ggAcLiDjAAAE" } ]; function checkID(el){ return el.customId === this.param; } let found = clients.find(checkID, {param: "user1"}); console.info(found);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM