Array.prototype.find 在数组中搜索对象

Array.prototype.find to search an Object in an Array

我正在使用 Array.prototype.find 在数组中搜索对象人物。我想使用 id 来找到这个对象。我一直在阅读有关查找方法 (ES6) 的信息,但我不知道为什么我的代码是错误的。

这是我的代码:

AddresBook.prototype.getPerson = function (id) {

    return this.lisPerson.find(buscarPersona, id);

};

function buscarPersona(element, index, array) {
    if (element.id === this.id) {
        return element;
    } else
        return false;
}

可以在 AddressBook's 原型中添加一个肮脏的解决方案 last_id

所以你的代码如下

AddressBook.prototype.getPerson = function(id){
    this.last_id = id;
    return this.lisPerson.find(buscarPersona,this);
}
function buscarPersona(element){
    if(element.id === this.last_id){
        return element;
    }else{
        return false;   
    }
}

您将 id 作为 thisArg parameter to .find() 直接传递,但在 buscarPersona 内部您期望 this 是一个具有 .id 属性。所以要么

  • 传递一个对象:

    lisPerson.find(buscarPersona, {id});
    function buscarPersona(element, index, array) {
        return element.id === this.id;
    }
    
  • 直接使用this

    lisPerson.find(buscarPersona, id);
    function buscarPersona(element, index, array) {
        // works in strict mode only, make sure to use it
        return element.id === this;
    }
    
  • 只是传递一个闭包

    lisPerson.find(element => element.id === id);