Javascript 在数组中搜索类属性为true的lastIndexOf
我有一个类数组,所有这些类的属性都是isPurchased,我想返回数组中最后一个值设置为true的项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
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
搜索固定值。它不接受条件(适当的术语:谓词),即使它接受了,您也不会以这种方式指定谓词。感谢您的解决方案,我更喜欢使用这种方法来完成我需要做的事情。