簡體   English   中英

從數組javascript獲取每個項目之一

[英]get one of each item from array javascript

我有一個對象數組。 對象屬性之一是“位置”。 另一個是“ player_name”。 玩家眾多,只有8個獨特的位置。 我想遍歷陣列並抓住每個位置的第一個玩家,然后將其移動到新陣列。 最后,我應該有一個新的數組,共有8個玩家,每個玩家都有一個獨特的位置。

這是我的代碼:

// Sample Object: { "name": "Frank Johnson", "position": "C", "cnx": "17" }

function compare(a,b) {
  if (parseFloat(a.cnx) < b.cnx)
    return -1;
  if (parseFloat(a.cnx) > b.cnx)
    return 1;
  return 0;
}

var sorted = array.sort(compare);
var new_array = []
sorted.forEach(function (i) {
  if (i.position === "1B" ) {
    new_array.push(i)
    // How do I make it stop looking for 1B's at this point??
  }
})

保留您在數組中遇到的位置的地圖,並添加不在地圖中的每個對象:

function compare(a,b) {
  if (parseFloat(a.cnx) < b.cnx)
    return -1;
  if (parseFloat(a.cnx) > b.cnx)
    return 1;
  return 0;
}

array.sort(compare);
var new_array = [];
var positions = {};
array.forEach(function (i) {
  if (!(i.position in positions)) {
    positions[i.position] = 1;
    new_array.push(i);
  }
});

要從任意位置獲得多個玩家,您可以將地圖項用作計數器,並為特定位置放置初始值:

array.sort(compare);
var new_array = [];
var positions = { OF: 3 };
array.forEach(function (i) {
  if (!(i.position in positions)) {
    positions[i.position] = 1;
  }
  if (positions[i.position] > 0) {
    positions[i.position]--;
    new_array.push(i);
  }
});

(您也可以使用它來省略位置,例如{ OF: 3, C: 0 } )。

使用非常流行的lodash庫:

假設您有一個對象數組,例如:

var data = [
  { "name": "Player 1", "position": "C", "cnx": "17" },
  { "name": "Player 2", "position": "B", "cnx": "17" },
  { "name": "Player 3", "position": "B", "cnx": "17" }
];

您可以通過以下位置按位置獲得第一個玩家:

_.mapValues(_.groupBy(data, 'position'), _.first);

輸出:

{
  "C": {
    "name": "Player 1",
    "position": "C",
    "cnx": "17"
  },
  "B": {
    "name": "Player 2",
    "position": "B",
    "cnx": "17"
  }
}

如果要使用數組格式,則可以使用:

_.values(_.mapValues(_.groupBy(x, 'position'), _.first))

輸出:

[
  {
    "name": "Player 1",
    "position": "C",
    "cnx": "17"
  },
  {
    "name": "Player 2",
    "position": "B",
    "cnx": "17"
  }
]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM