【问题标题】:Javascript - loop thro array and sort the objects based on the key value inside [duplicate]Javascript - 遍历数组并根据内部的键值对对象进行排序[重复]
【发布时间】:2017-06-02 13:02:32
【问题描述】:

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

【问题讨论】:

  • 请添加数据和代码,您尝试了这个问题。也请看这里:minimal reproducible example
  • Fiddle 已发布。
  • 这些全局abcd 变量是干什么用的?
  • 只是为了快速演示小提琴。

标签: javascript arrays json sorting object


【解决方案1】:

你可以使用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))

【讨论】:

  • 是的,忘记排序了,谢谢!
  • 或者mess.sort(function(a, b) { return a.position - b.position }),如果你在没有arrow functions的环境中运行。
  • @Ben,你错过了return声明
  • @vp_arth,发帖后看到了。固定:)
【解决方案2】:

尝试排序:

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

【讨论】:

  • 谢谢 Maria,忘了排序 - 投了赞成票!
【解决方案3】:

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

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

或者你可以从头到尾迭代,这也适用于不连续的位置。

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

【讨论】:

  • 谢谢尼娜,效果很好!
猜你喜欢
  • 2020-05-03
  • 2021-10-14
  • 2020-04-21
  • 1970-01-01
  • 2021-09-09
  • 1970-01-01
  • 1970-01-01
  • 2014-05-29
  • 2018-12-27
相关资源
最近更新 更多