在过滤器上获取所需的堆栈对象

时间:2015-11-20 13:10:18

标签: javascript stack

以这种方式说我的堆栈有对象.. [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首先返回,而不是最右边的等等。

2 个答案:

答案 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];