我需要对一组对象进行排序,并将具有相同键/值对的对象推送到新数组。
我正在整理的对象是足球运动员。我拥有一系列对象中的所有玩家,并希望将每个位置推入他们自己的数组中。
实施例。每个对象都有一个“位置”键,因此任何对象“位置”值为“QB”的对象都应该被推入一个新的数组“四分卫”。
这是迄今为止的代码 - 它是在Angular中所以我首先将所有玩家保存到变量“Roster”中,然后需要将玩家按位置分隔成单独的阵列,以保持所有玩家的位置。
angular.module('clientApp')
.controller('PlayersCtrl', function (
$scope,
Player
) {
// $scope.players = Player.getList().$object;
var Roster = Player.getList().$object;
console.log(Roster);
});
虽然我有兴趣学习如何在一个函数中将所有位置推入自己的数组中,但我也想知道如何在一个位置执行此操作。就像如何将所有四分卫从名册推到一个新的四分卫阵容中。
答案 0 :(得分:0)
var positions = {};
for(var i = 0; i < Roster.length; i++) {
var position = Roster[i].position;
positions[position] = positions[position] || [];
positions[position].push(Roster[i]);
}
答案 1 :(得分:0)
好吧,你可以通过forEach循环来完成它,然后根据位置图分配你的玩家。
在我的例子中(借口我的足球知识),我使用forEach函数(由于顶部的arrayOfObject
语句提供)运行'use strict';
,然后使用位置实际对象的属性,用于检查targetObject中是否已有数组,如果没有,我创建一个新数组并将播放器推入其中。
最后的日志语句会显示输出结果。我添加了从位置QB到QuarterBack的映射作为额外的。如果找不到地图,则需要实际位置:)
'use strict';
var arrayOfObject = [
{ name: 'player', position: 'QB' },
{ name: 'player 2', position: 'W' },
{ name: 'player 3', position: 'RW' }
], targetObject = {}, map = {
'QB': 'QuarterBacks',
'W': 'Wingers',
'RW': 'RightWingers'
};
arrayOfObject.forEach(function(player) {
var pos = player.position,
mappedPosition = map[pos] || pos;
if (!targetObject[mappedPosition]) {
targetObject[mappedPosition] = [];
}
targetObject[mappedPosition].push(player);
});
console.log(targetObject);
答案 2 :(得分:0)
如果要为每个数组定义一个单独的数组,则可以使用switch语句。
var roster = [
{player: "Ben", position: "qb", salary: 1000},
{player: "Brown", position: "wr", salary: 1200},
{player: "Landry", position: "qb", salary: 800}
];
var qbArray = [];
var wrArray = [];
function parseIntoArrayByPosition() {
for (var i = 0; i < roster.length; i++) {
var position = roster[i].position;
switch (position) {
case "qb":
qbArray.push(roster[i]);
break;
case "wr":
wrArray.push(roster[i]);
break;
}
}
}
答案 3 :(得分:0)
我可能会略有不同,但JavaScript似乎允许您以多种方式执行操作。如果我从@dspano的答案中删除列表,我会得到这个代码:
function createListByPosition(inputList, desiredPosition) {
var outputList = new Array();
for (var i = 0; i < inputList.length; i++) {
var position = inputList[i].position;
if (position === desiredPosition)
{
outputList.push(inputList[i])
}
}
return outputList;
}
var quaterbackList = createListByPosition(roster, 'qb');
这也具有非常通用的好处。