Javascript 在数组中搜索类属性为true的lastIndexOf

Javascript 在数组中搜索类属性为true的lastIndexOf,javascript,arrays,class,lastindexof,Javascript,Arrays,Class,Lastindexof,我有一个类数组,所有这些类的属性都是isPurchased,我想返回数组中最后一个值设置为true的项 function ShopItem = new function(id, name, isPurchased) { this.id = id; this.name = name; this.isPurchased = isPurchased; } var apple = ShopItem(1, "Apple", false); var banana = Sho

我有一个类数组,所有这些类的属性都是isPurchased,我想返回数组中最后一个值设置为true的项

function ShopItem = new function(id, name, isPurchased) {
    this.id = id;
    this.name = name;
    this.isPurchased = isPurchased;
}    

var apple = ShopItem(1, "Apple", false);
var banana = ShopItem(2, "Banana", true);
var pear = ShopItem(3, "Pear", false);

var shopItems = [apple, banana, pear];

var x = shopItems.lastIndexOf(this.isPurchased == true);
console.log(x);
当我执行console.log(x)时;我想让它还香蕉课

在我尝试查找最后一个项目之前,一切正常,为此,我尝试使用:

var x = shopItems.lastIndexOf(this.isPurchased == true);
但它返回-1

编辑:

我有一种方法可以通过使用以下代码来解决此问题:

var y = null;

for(var o in shopItems) {
    if(shopItems[o].isPurchased == true) {
        y = shopItems[o];
    }
}

console.log(y);

但是,如果lastIndexOf可以为我解决问题,那么我宁愿使用它,而不是重新发明轮子。

lastIndexOf
搜索值而不检查条件,加上
this.isPurchased==true
是一个表达式,而不是lambda。这类似于检查
shopItems.lastIndexOf(true)
。这没有内置到JavaScript中(甚至在ES6中也没有,它提供了
Array.prototype.find[Index]
,但没有
findLast
),因此您必须自己构建它:

function findLast(items, predicate) {
    for (var i = items.length - 1; i >= 0; i--) {
        var item = items[i];

        if (predicate(item)) {
            return item;
        }
    }
}
并将其与回调函数一起使用:

var x = findLast(shopItems, function (item) {
    return item.isPurchased;
});

lastIndexOf
搜索固定值。它不接受条件(适当的术语:谓词),即使它接受了,您也不会以这种方式指定谓词。感谢您的解决方案,我更喜欢使用这种方法来完成我需要做的事情。