如果对象具有属性,则对对象数组进行排序

时间:2018-11-19 14:50:51

标签: javascript arrays json reactjs sorting

我有一个这样的对象:

"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

谢谢!

4 个答案:

答案 0 :(得分:5)

您可以检查属性,并检查要排序的增量。

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; }

答案 1 :(得分:0)

您可以使用数组中的函数unshift来实现您的目标。

  

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)

答案 2 :(得分:0)

这应该是可行的,即将具有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);

答案 3 :(得分:0)

这是另一个不使用initargs=(arrays_dict,) 的排序功能:

array in