我有一个简单的数组,我通过json获得,其中每个对象都有一个具有特定值的position
键。我想根据内部键的值重新排序它们(更改它们的索引)。
以下是我到目前为止:JSFiddle
代码:
var mess = [
a = {
lorem: "ipsum",
position: 3
},
b = {
lorem: "ipsum",
position: 2
},
c = {
lorem: "ipsum",
position: 4
},
d = {
lorem: "ipsum",
position: 1
}
]
var order = [];
for (i = 0; i < mess.length; i++) {
order.splice(mess[i].position - 1, 0, mess[i]);
}
当前循环的问题是只有第一个和最后一个对象在order
数组中正确排列(1,4)。
答案 0 :(得分:2)
您可以使用Array.prototype.sort
方法:
let mess = [
{lorem: "ipsum",position: 3},
{lorem: "ipsum",position: 2},
{lorem: "ipsum",position: 4},
{lorem: "ipsum",position: 1}
];
//
console.log(mess.sort((a, b) => a.position - b.position))
&#13;
答案 1 :(得分:1)
您可以将该位置用作新数组的索引。
var mess = [{ lorem: "ipsum", position: 3 }, { lorem: "ipsum", position: 2 }, { lorem: "ipsum", position: 4 }, { lorem: "ipsum", position: 1 }],
order = [],
i;
for (i = 0; i < mess.length; i++) {
order[mess[i].position - 1] = mess[i];
}
console.log(order);
&#13;
或者你可以从最后开始迭代,这也适用于不连续的位置。
var mess = [{ lorem: "ipsum", position: 3 }, { lorem: "ipsum", position: 2 }, { lorem: "ipsum", position: 4 }, { lorem: "ipsum", position: 1 }],
order = [],
i = mess.length;
while (i--) {
order.splice(mess[i].position - 1, 0, mess[i]);
}
console.log(order);
&#13;
答案 2 :(得分:1)
尝试排序:
order = mess.sort(function (a, b) {
return a.position - b.position;
});