以这种方式说我的堆栈有对象.. [obj1 ,obj2 , obj3 , obj1]
我有2个类似的obj1
。
现在在obj1
的过滤器上....我希望最先选择最合适的obj1 ......但它始终是最左边的obj1
可能是因为它首先被添加... FIFO
请告诉我如何过滤LIFO
这是我的代码
var obj = stack.filter(function ( obj ) {
return obj.id === 'somevalue';
})[0];
以上代码返回obj1
(最左边)
它总是过滤并根据FIFO给出对象....我想要LIFO ..意味着最右边的obj1
首先返回,而不是最右边的等等。
答案 0 :(得分:1)
您可以创建列表的副本,并在过滤之前先使用.reverse()
来反转列表。
var obj = [].slice.call(stack).reverse().filter(function ( obj ) {
return obj.id === 'somevalue';
})[0];
如果你有一个大的列表,我会从数组的末尾开始使用for
循环,并在找到匹配时返回。这样可以避免遍历整个列表。
var obj = (function() {
for(var i = stack.length - 1; i >= 0; i--) {
if(stack[i].id === 'somevalue') {
return stack[i];
}
}
})();
答案 1 :(得分:0)
获取堆栈中的最后一项,
var obj = stack.filter(function ( obj ) {
return obj.id === 'somevalue';
})[stack.length -1];