【问题标题】:sorting and pushing objects in an array of objects在对象数组中排序和推送对象
【发布时间】:2015-12-04 05:04:06
【问题描述】:

抱歉缺少代码——但这是一个非常直接的 javascript 问题。

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

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

例如。每个对象都有一个“位置”键,因此键“位置”的值为“QB”的任何对象都应该被推入一个新数组“Quarterbacks”中。

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

【问题讨论】:

标签: javascript arrays sorting javascript-objects


【解决方案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>";

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-08-27
      • 2020-10-11
      • 1970-01-01
      • 2016-10-29
      • 2019-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-17
      相关资源
      最近更新 更多