簡體   English   中英

如果對象具有屬性,則對對象數組進行排序

[英]sort array of objects if the object has a property

我有一個這樣的對象:

"data": [
    {
        "name": "name1",
        "price": 4.2,
    },
    {
        "name": "name2",
        "price": 12.9,
        "newOne": {}
    },
    {
        "name": "name3",
        "price": 10.9,
        "newOne": {
            "code": "02ec583021de8e36ae8006c3caef72d9",
            "name": "מבצע 13"
        }
    },
    {
        "name": "name3",
        "price": 10.9,
    },
],

我已經嘗試了多種方法對其進行排序...需要一些幫助

如果此數組具有“ newOne”屬性,我希望該對象在數組中排在首位,等等。

如果您有3個具有“ newOne”屬性的對象,那么它們將是第一個依次顯示的對象,而不是下一個映射對象將在數組的頂部。

我正在使用React如果這意味着任何東西

謝謝!

您可以檢查該屬性,並檢查增量以進行排序。

 var data = [{ name: "name1", price: 4.2 }, { name: "name2", price: 12.9, newOne: {} }, { name: "name3", price: 10.9, newOne: { code: "02ec583021de8e36ae8006c3caef72d9", name: "מבצע 13" } }, { name: "name3", price: 10.9 }]; data.sort((a, b) => ('newOne' in b) - ('newOne' in a)); console.log(data); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

您可以使用從數組取消移位功能來實現您的目標。

unshift()方法將一個或多個元素添加到數組的開頭,並返回數組的新長度。

 const data = [ { "name": "name1", "price": 4.2, }, { "name": "name2", "price": 12.9, "newOne": {} }, { "name": "name3", "price": 10.9, "newOne": { "code": "02ec583021de8e36ae8006c3caef72d9", "name": "מבצע 13" } }, { "name": "name3", "price": 10.9, }, ] let result = [] data.forEach(item => { if (item.newOne) result.unshift(item) else result.push(item) }) console.log(result) 

使用reduce可以實現相同的目的:

const result = data.reduce((agg, itr) => {
  if (itr.newOne) agg.unshift(itr)
  else agg.push(itr)
  return agg
}, [])

console.log(result)

通過將設置了newOne屬性的項的值視為不具有那些值的項,可以做到這一點。

 var t = {"data": [ { "name": "name1", "price": 4.2, }, { "name": "name2", "price": 12.9, "newOne": {} }, { "name": "name3", "price": 10.9, "newOne": { "code": "02ec583021de8e36ae8006c3caef72d9", "name": "מבצע 13" } }, { "name": "name3", "price": 10.9, }, ]}; t.data.sort(function(a,b){ var aVal = a.newOne == undefined ? 0 : 1; var bVal = b.newOne == undefined ? 0 : 1; return bVal - aVal; }); console.log(t.data); 

這是另一個不使用array in排序函數:

data.sort((a,b) => a.newOne === b.newOne ? 0 : a.newOne ? -1 : 1)

暫無
暫無

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

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