[英]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.