我有一個包含 50 多個物件形式的條目的陣列,我想根據專案 ID 保存這些條目,以便我可以對它們應用某些計算。例如,我想將所有條目的時間與專案 ID“Las5241Wz”相加。
由于陣列可以動態變化,我無法手動分析它。如何根據專案 ID 預先分離資料并將它們推送到新陣列中?真正的 Array 最多包含 16 個具有相同 ID 的物件。
var data= []
data = [
//...objects
{
itemId: "Las5241Wz",
time: 10
},
{
itemId:"Bos1239Zf",
time: 11
},
{
itemId:"Las5241Wz",
time: 15
},
{
itemId:"Bos1239Zf",
time: 21
}
//...more objets
]
對此的解決方案應如下所示:
var Item1 = [
{
itemId: "Las5241Wz",
time: 10
},
{
itemId:"Las5241Wz",
time: 15
},
]
var Item2 = [
{
itemId:"Bos1239Zf",
time: 11
},
{
itemId:"Bos1239Zf",
time: 21
}
]
uj5u.com熱心網友回復:
這是另一個解決方案,它從給定的物件構建一個具有“item1”、“item2”等屬性的物件:
const data = [
//...objects
{
itemId: "Las5241Wz",
time: 10
},
{
itemId:"Bos1239Zf",
time: 11
},
{
itemId:"Las5241Wz",
time: 15
},
{
itemId:"Bos1239Zf",
time: 21
}
//...more objets
]
console.log(
Object.values(
data.reduce((o,e)=>((o[e.itemId]=o[e.itemId]||[]).push(e),o),{}))
.reduce((o,c,i)=>(o["item" (i 1)]=c,o),{})
);
這是一個“單行”,因此不太容易閱讀。因此,可能不是您要放入生產代碼的版本。
uj5u.com熱心網友回復:
除非您有單獨保留串列的性能原因,否則答案是您可以將 id 串列存盤為 aSet并在您想要獲取僅用于該 id 的串列時使用 array.filter
Set s = new Set();
for (let i = 0; i < data.length; i ) {
s.add(data[i].itemId);
}
var createFilterFunc(id) {
return function(elem) {
return elem.itemId == id;
}
}
var items = data.filter (createFilterFunc("Las5241Wz"));
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/354537.html
標籤:javascript 数组 目的
