我推一些數據到陣列一個foreach環內:推送數據(嵌套)陣列,這取決於存在的對象字段
let result = [];
data.forEach(function(part){
let text = part.one + part.two;
result.push({
text: text,
element: [{ id: part._id, page: part.page }]
});
});
但我需要檢查是否text
已經在任何對象的陣列。
如果有這樣一個對象,那麼只有頁面part.page
應該被添加到這個對象的數組中並且具有相同的文本字段。否則,數據應該只添加到結果數組中。
例
result = [
{
text: 'Some text',
element: [{ id: 1, page: '12-34'}]
}
]
如果下一個part
-elements應該是這樣的:
{ id: 2, one: 'Some ', two: 'text', page: '45-67' }
{ id: 3, one: 'Another ', two: 'text', page: '12-34' }
result
應該得到
result = [
{
text: 'Some text',
pages: [{ id: 1, page: '12-34'}, { id: 2, page: '45-67' }] // page added to the array, as text is identical
},
{
text: 'Another text',
pages: [{ id: 3, page: '12-34'}]
}
]
其他問題
是否有可能通過text
-field對結果數組排序第一,然後通過page
-field對第二個元素對象排序?
這將是第一個對象錯誤的順序:
[{ id: 2, page: '45-67'}, { id: 1, page: '12-34' }]
...和「一個諾特爾文本」應該是「小號 OME文本」之前
什麼'result.filter(X => x.text ===文本)',而不是一個新的對象? – user3848987
當你有一個非常大的數組,並且需要爲每個新條目遍歷整個事物時,它會變得非常緩慢。使用對象作爲查找速度要快得多,因爲它不必掃描整個數組,而是使用智能查找機制 –