【问题标题】:How do I get the top highest values in an Array of Objects without using sort()如何在不使用 sort() 的情况下获得对象数组中的最高值
【发布时间】:2017-11-27 11:28:50
【问题描述】:

我有一个需要执行任务的对象数组。

如果不使用 sort() 方法,我需要根据谁投票给 Trump 和谁投票给 Hillary 对数组中的对象进行排序。

此外,我需要找到投票支持特朗普最多的五个州,并找到投票支持希拉里最多的五个州。

这是数组:

var states = [{
  stateName: "Delaware",
  votesForHillary: 14,
  votesForTrump: 123,
  population: 925749
}, {
  stateName: "Pennsylvania",
  votesForHillary: 240,
  votesForTrump: 1,
  population: 12773801
}, {
  stateName: "New Jersey",
  votesForHillary: 124,
  votesForTrump: 15,
  population: 8899339
}, {
  stateName: "Georgia",
  votesForHillary: 12,
  votesForTrump: 353,
  population: 9992167
}, {
  stateName: "Connecticut",
  votesForHillary: 23,
  votesForTrump: 135,
  population: 3596080
}, {
  stateName: "Massachusetts",
  votesForHillary: 50,
  votesForTrump: 53,
  population: 6692824
}, {
  stateName: "Maryland",
  votesForHillary: 424,
  votesForTrump: 23,
  population: 600000
}, {
  stateName: "South Carolina",
  votesForHillary: 0,
  votesForTrump: 1,
  population: 4774839
}, {
  stateName: "New Hampshire",
  votesForHillary: 34,
  votesForTrump: 14,
  population: 1323459
}, {
  stateName: "Virginia",
  votesForHillary: 233,
  votesForTrump: 153,
  population: 8260405
}, {
  stateName: "New York",
  votesForHillary: 253,
  votesForTrump: 15,
  population: 19651127
}, {
  stateName: "North Carolina",
  votesForHillary: 5,
  votesForTrump: 404,
  population: 600000
}, {
  stateName: "Rhode Island",
  votesForHillary: 4,
  votesForTrump: 6,
  population: 1051511
}, {
  stateName: "Vermont",
  votesForHillary: 23,
  votesForTrump: 54,
  population: 626630
}, {
  stateName: "Kentucky",
  votesForHillary: 46,
  votesForTrump: 647,
  population: 4395295
}, {
  stateName: "Tennessee",
  votesForHillary: 44,
  votesForTrump: 600,
  population: 6495978
}, {
  stateName: "Ohio",
  votesForHillary: 35,
  votesForTrump: 45,
  population: 11570808
}, {
  stateName: "Louisiana",
  votesForHillary: 65,
  votesForTrump: 56,
  population: 4625470
}, {
  stateName: "Indiana",
  votesForHillary: 21,
  votesForTrump: 12,
  population: 6570902
}, {
  stateName: "Mississippi",
  votesForHillary: 340,
  votesForTrump: 151,
  population: 2991207
}, {
  stateName: "Illinois",
  votesForHillary: 114,
  votesForTrump: 53,
  population: 12882135
}, {
  stateName: "Alabama",
  votesForHillary: 35,
  votesForTrump: 1351,
  population: 4833722
}, {
  stateName: "Maine",
  votesForHillary: 1,
  votesForTrump: 2,
  population: 1328302
}, {
  stateName: "Missouri",
  votesForHillary: 240,
  votesForTrump: 15,
  population: 6044171
}, {
  stateName: "Arkansas",
  votesForHillary: 53,
  votesForTrump: 153,
  population: 2959373
}, {
  stateName: "Michigan",
  votesForHillary: 35,
  votesForTrump: 647,
  population: 600000
}, {
  stateName: "Florida",
  votesForHillary: 46,
  votesForTrump: 474,
  population: 19552860
}, {
  stateName: "Texas",
  votesForHillary: 0,
  votesForTrump: 0,
  population: 26448193
}, {
  stateName: "Iowa",
  votesForHillary: 436,
  votesForTrump: 123,
  population: 3090416
}, ];

这是我使用 sort() 方法的方式。

states.sort(function (a, b) {
  return b.votesForTrump - a.votesForTrump;
});

这不是家庭作业,而是我试图理解的挑战。

【问题讨论】:

  • 为什么不排序?有原因吗?
  • 到目前为止你尝试过什么?家庭作业已经是一个有点争议的话题,但如果没有你的任何尝试,你很可能不会得到任何答案。
  • 为什么你不使用支持方法是有问题的,并且使这个问题听起来像家庭作业或类似的问题。如果是这种情况,在不使用sort() 或类似方法的情况下,您需要自己循环遍历所有对象并记录最小值、最大值。有很多例子(简单的谷歌等......)如何循环。尝试其中一个,如果你有问题在这里发布你的代码,我们看看。

标签: javascript arrays sorting


【解决方案1】:

下一次,请在寻求帮助之前表现出自己的一些努力;

对于您的问题,需要map,filter,Math.max 的组合;

var states = [{
  stateName: "Delaware",
  votesForHillary: 14,
  votesForTrump: 123,
  population: 925749
}, {
  stateName: "Pennsylvania",
  votesForHillary: 240,
  votesForTrump: 1,
  population: 12773801
}, {
  stateName: "New Jersey",
  votesForHillary: 124,
  votesForTrump: 15,
  population: 8899339
}, {
  stateName: "Georgia",
  votesForHillary: 12,
  votesForTrump: 353,
  population: 9992167
}, {
  stateName: "Connecticut",
  votesForHillary: 23,
  votesForTrump: 135,
  population: 3596080
}, {
  stateName: "Massachusetts",
  votesForHillary: 50,
  votesForTrump: 53,
  population: 6692824
}, {
  stateName: "Maryland",
  votesForHillary: 424,
  votesForTrump: 23,
  population: 600000
}, {
  stateName: "South Carolina",
  votesForHillary: 0,
  votesForTrump: 1,
  population: 4774839
}, {
  stateName: "New Hampshire",
  votesForHillary: 34,
  votesForTrump: 14,
  population: 1323459
}, {
  stateName: "Virginia",
  votesForHillary: 233,
  votesForTrump: 153,
  population: 8260405
}, {
  stateName: "New York",
  votesForHillary: 253,
  votesForTrump: 15,
  population: 19651127
}, {
  stateName: "North Carolina",
  votesForHillary: 5,
  votesForTrump: 404,
  population: 600000
}, {
  stateName: "Rhode Island",
  votesForHillary: 4,
  votesForTrump: 6,
  population: 1051511
}, {
  stateName: "Vermont",
  votesForHillary: 23,
  votesForTrump: 54,
  population: 626630
}, {
  stateName: "Kentucky",
  votesForHillary: 46,
  votesForTrump: 647,
  population: 4395295
}, {
  stateName: "Tennessee",
  votesForHillary: 44,
  votesForTrump: 600,
  population: 6495978
}, {
  stateName: "Ohio",
  votesForHillary: 35,
  votesForTrump: 45,
  population: 11570808
}, {
  stateName: "Louisiana",
  votesForHillary: 65,
  votesForTrump: 56,
  population: 4625470
}, {
  stateName: "Indiana",
  votesForHillary: 21,
  votesForTrump: 12,
  population: 6570902
}, {
  stateName: "Mississippi",
  votesForHillary: 340,
  votesForTrump: 151,
  population: 2991207
}, {
  stateName: "Illinois",
  votesForHillary: 114,
  votesForTrump: 53,
  population: 12882135
}, {
  stateName: "Alabama",
  votesForHillary: 35,
  votesForTrump: 1351,
  population: 4833722
}, {
  stateName: "Maine",
  votesForHillary: 1,
  votesForTrump: 2,
  population: 1328302
}, {
  stateName: "Missouri",
  votesForHillary: 240,
  votesForTrump: 15,
  population: 6044171
}, {
  stateName: "Arkansas",
  votesForHillary: 53,
  votesForTrump: 153,
  population: 2959373
}, {
  stateName: "Michigan",
  votesForHillary: 35,
  votesForTrump: 647,
  population: 600000
}, {
  stateName: "Florida",
  votesForHillary: 46,
  votesForTrump: 474,
  population: 19552860
}, {
  stateName: "Texas ",
  votesForHillary: 0,
  votesForTrump: 0,
  population: 26448193
}, {
  stateName: "Iowa",
  votesForHillary: 436,
  votesForTrump: 123,
  population: 3090416
}, ];

let trumpStates = states.filter((data) => {return data["votesForTrump"] > data["votesForHillary"]});
let hillaryStates = states.filter((data) => {return data["votesForTrump"] < data["votesForHillary"]});

let allTrumpVotes = [];
let allHillaryVotes = [];

trumpStates.map((data) => allTrumpVotes.push(data["votesForTrump"]));

hillaryStates.map((data) => allHillaryVotes.push(data["votesForHillary"]));

let maxTrumpVotes = Math.max(...allTrumpVotes);
let maxHillaryVotes = Math.max(...allHillaryVotes);
console.log(allHillaryVotes)
let maxTrumpState = trumpStates.filter((data) => {
  if(data["votesForTrump"] == maxTrumpVotes) return data;
  });
  
 let maxHillaryState = hillaryStates.filter((data) => {
  if(data["votesForHillary"] == maxHillaryVotes) return data;
  });
console.log(maxHillaryState,maxTrumpState)

【讨论】:

    【解决方案2】:

    以下功能将有助于对内容进行排序,您也可以进行相同的排序以获得希拉里的大多数选票状态。

        function sorting() {
        console.log("Lenght : " + states.length);
    
        let TopVotedToTrump: typeof states;
        let TopVotedToHillary: typeof states;
        TopVotedToTrump.push(states[0]);
        for (let i: number = 0; i < states.length-1 ; i++) {
            for (let j: number = i + 1; j < states.length; j++) {
                if ((states[i].votesForTrump < states[j].votesForTrump) || (states[i].votesForTrump == states[j].votesForTrump && states[i].votesForHillary < states[j].votesForHillary))
                {
                    console.log(states[i].votesForTrump + " swapped with " + states[j].votesForTrump);
                    let temp = states[i];
                    states[i] = states[j]
                    states[j] = temp
                }
                if ((states[i].votesForHillary < states[j].votesForHillary)) {
                    let temp = states[i];
                    states[i] = states[j]
                    states[j] = temp
                }
            }
    
            if (TopVotedToTrump.indexOf(states[i]) != -1) {
                TopVotedToTrump.push(states[i]);
            }
        }
    
        //for (let i of states) {
        //    console.log("{" + " State: " + i.stateName + " Population: " + i.population + " Votes For Hillary: " + i.votesForHillary + " Votes For Trump: "+ i.votesForTrump + "}");
        //}
        //console.log("Result : " + JSON.parse(states.toString()));
    }
    

    【讨论】:

      猜你喜欢
      • 2018-01-26
      • 2013-12-05
      • 2015-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-09
      • 2016-08-09
      • 1970-01-01
      相关资源
      最近更新 更多