![](/img/trans.png)
[英]Get 1 element from each javascript array concat then loop into one array
[英]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.