Javascript - 循环thro数组并根据

时间:2017-01-18 08:30:22

标签: javascript arrays json sorting object

我有一个简单的数组,我通过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)。

3 个答案:

答案 0 :(得分:2)

您可以使用Array.prototype.sort方法:

&#13;
&#13;
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;
&#13;
&#13;

答案 1 :(得分:1)

您可以将该位置用作新数组的索引。

&#13;
&#13;
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;
&#13;
&#13;

或者你可以从最后开始迭代,这也适用于不连续的位置。

&#13;
&#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;
&#13;
&#13;

答案 2 :(得分:1)

尝试排序:

order = mess.sort(function (a, b) {
    return a.position - b.position;
});