按等级创建新的对象数组



尝试根据 JSON 响应创建新对象。

假设我有一个 json 响应

[{
"id": "something1", 
"diff": "0.09"
},     
{
"id": "something2", 
"diff": "0.7"
},     
{
"id": "something3", 
"diff": "0.1"
}]

如何创建一个新的对象数组,同时按差异对每个对象进行排名?

[{
"rank": 1,
"id": "something2", 
"diff": "0.7"
},     
{
"rank": 2,
"id": "something3", 
"diff": "0.1"
},     
{
"rank": 3,
"id": "something1", 
"diff": "0.09"
}] 

只需要了解逻辑将如何工作

var obj = [];
$.each(data, function(a) {
// var rank = 0; 
// logic - if/else based on diff     
obj.push({"rank": rank, "id": this.id, "diff" : this.percent_change_1h })
}); 

您可以使用slice创建数组的副本,然后通过减去差异来sort它,并使用rank属性将其映射回来

var arr = [{
"id": "something1",
"diff": "0.09"
}, {
"id": "something2",
"diff": "0.7"
}, {
"id": "something3",
"diff": "0.1"
}];
var arr2 = arr.slice().sort((a,b) => b.diff - a.diff).map((x,i) => (x.rank=(i+1),x));
console.log(arr2);
.as-console-wrapper {max-height: 100%!important; top:0;}

这是我的做法:

const data = [{
id: "something1",
diff: "0.09"
}, {
id: "something2",
diff: "0.7"
}, {
id: "something3",
diff: "0.1"
}, {
id: "something4",
diff: null
}];
const result = data
.filter(({diff}) => diff !== null) // remove all objects with null for diff
.sort((x, y) => y.diff - x.diff) // sort the data in descending order
.map((x, i) => Object.assign({rank: i + 1}, x)); // copy object with rank
console.log("result:", result);
console.log("data:", data); // unchanged

这也适用于负数。

var response = [{
"id": "something1", 
"diff": "0.09"
},     
{
"id": "something2", 
"diff": "0.7"
},     
{
"id": "something3", 
"diff": "0.1"
}]
var sorted = response.slice().sort(function(a, b) {    
return (parseFloat(b.diff)) - (parseFloat(a.diff));
})
sorted.forEach(function(row, index) {
row.rank = index +1;
});
console.log(sorted);

您可以使用:

var response = [{
"id": "something1",
"diff": "0.09"
},
{
"id": "something2",
"diff": "0.7"
},
{
"id": "something3",
"diff": "0.1"
}
];
var sorted = JSON.parse(JSON.stringify(response));
sorted.sort(function(a, b) {
return (Number(b.diff) - Number(a.diff)) > 0;
}).forEach(function(e, index) {
e.rank = index + 1;
});
console.log(sorted);

让我知道这是否有效。

最新更新