2015-11-20 74 views
0

所需的堆棧對象說我的堆棧在這樣一個對象.. [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

只是扭轉你的陣列。 – pankaj98

回答

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]; 
    } 
    } 
})(); 
+0

Yea反向工作正常,,,,但我認爲我必須扭轉堆棧回來後,請求過濾器,否則它將保持顛倒......我是對的嗎? –

+0

是的,你說得對。 '.reverse()'改變數組。你可以通過首先調用'Array.prototype.slice.call(stack)'來創建一個數組副本,但是我認爲使用'for'循環方法更加優雅。 – Merott

+0

反向過濾器m調用stack.reverse(); ...會沒事的 –

0

得到最後一個項目的堆棧,

var obj = stack.filter(function (obj) { 

    return obj.id === 'somevalue'; 

})[stack.length -1]; 
+0

沒有.....我想要obj1返回,所以我必須使用過濾器,,,,彈出wil彈出任何obj頂部 –

+0

我編輯我的代碼,嘗試 – azad