簡體   English   中英

Javascript 根據屬性值從對象數組中獲取下一個 object

[英]Javascript get the next object from an array of objects based on a propery value

我有一個看起來像這樣的 object 數組:

orders:
[
  0: {
    order_id: 234,
    text: 'foo'
  },
  1: {
    order_id: 567,
    text: 'bar'
  }
]

現在假設我有 id 234並且我需要數組中的下一個 object

這是我的 function:

nextOrder() {
    return this.orders.sort(function(a,b) {
      return a.order_id == 234 ? 0 : (a.index < b.index ? -1 : 1)
    });
}

這給了我以下錯誤:

“(評估期間的錯誤)”

什么是a.index 你的意思是數組索引?

我想你只是想在數組中找到項目的索引,然后在下一個索引處取 object:

nextOrder() {
  const index = this.orders.findIndex(order => order.order_id === 234)
  if (index === -1 || index === this.orders.length - 1) {
    // No such order or no next order
    return null
  }

  return this.orders[index + 1]
}

上一個訂單位於索引index - 1處,下一個訂單位於索引index + 1處。 要檢查任一順序是否存在,您只需要檢查索引是否在數組的范圍內。 只要0 <= i <= (orders.length - 1) ,索引i就在數組的范圍內。

如果index - 1 >= 0 (不能是負索引)並且index - 1 <= array.length - 1 (不能大於數組的最后一個索引),則存在先前的順序。

您可以簡單地使用findIndex

 let arr = [{order_id: 234, text: 'foo'},{ order_id: 567, text: 'bar'}] let findNextOrder = (id) => { let index = arr.findIndex(({ order_id }) => order_id === id) return index > -1 && index < arr.length - 1? arr[index + 1]: undefined } console.log(findNextOrder(234))

您不需要根據您對問題的評論進行排序,object 上也沒有名為 index 的屬性。

試試下面的代碼,

        let id = 234; // your id
        let index = this.orders.findIndex(order => order.some_id === id);
        console.log(this.orders[index + 1]); // give you the next object

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM