排序和推送对象数组中的对象

时间:2015-12-04 05:04:06

标签: javascript arrays sorting javascript-objects

抱歉缺少代码 - 但这是一个非常简单的javascript问题。

我需要对一组对象进行排序,并将具有相同键/值对的对象推送到新数组。

我正在整理的对象是足球运动员。我拥有一系列对象中的所有玩家,并希望将每个位置推入他们自己的数组中。

实施例。每个对象都有一个“位置”键,因此任何对象“位置”值为“QB”的对象都应该被推入一个新的数组“四分卫”。

对对象进行排序并将它们推送到适用于我的场景的新数组的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

您可以创建一个索引对象,其中包含您目前所见的所有位置,然后为每个位置累积一系列玩家:

var data = [
  {position: "quarterback", name: "Bob"}, 
  {position: "center", name: "Jim"},
  {position: "quarterback", name: "Ted"}, 
];

var positions = {};
data.forEach(function(item) {
    if (!(item.position in positions)) {
        positions[item.position] = [];
    }
    positions[item.position].push(item);
});

log(positions);

function log(x) {
    var div = document.createElement("div");
    div.innerHTML = JSON.stringify(x);
    document.body.appendChild(div);
}

或者你可以把它变成这样的通用分组函数:

var data = [
  {position: "quarterback", name: "Bob"}, 
  {position: "center", name: "Jim"},
  {position: "quarterback", name: "Ted"}
];

function groupData(data, key) {
    var results = {};
    data.forEach(function(item) {
      	console.log(item);
        var value = item[key];
        if (!(value in results)) {
            results[value] = [];
        }
        results[value].push(item);
    });
    return results;
}

log(groupData(data, "position"));

function log(x) {
    var div = document.createElement("div");
    div.innerHTML = JSON.stringify(x);
    document.body.appendChild(div);
}

答案 1 :(得分:1)

您可以使用Array.prototype.forEach

var data = [
  { position: "quarterback", name: "Bob" }, 
  { position: "center", name: "Jim" },
  { position: "quarterback", name: "Ted" }, 
];

var dataByPositions = {};
  
data.forEach(function(x) {
  dataByPositions[x.position] = dataByPositions[x.position] || [];
  dataByPositions[x.position].push(x);
});

// Demonstration purposes only:
document.body.innerHTML = "<pre>" + JSON.stringify(dataByPositions, null, 4) + "</pre>";