2017-06-07 89 views
1

解決了特定的承諾後,我希望遍歷響應中的每個項目,並按特定順序將它們推送到數組中。以特定順序創建新陣列

  1. status-start
  2. status-in-progress
  3. status-completed

我怎麼能去這樣做?這是我到目前爲止的代碼:

dashService.getBatches(refresh) 
.then(function (response) { 
    if (response.error) { 
    console.log("No data received"); 
    } else { 
    angular.forEach(response.items, function (item) { 
     if (item.status === 'start') { 
     currentBatches.push(job); 
     } 
    }); 
    } 
}); 
+1

也許更容易只是排序結果陣列?或者你有更復雜的用例? –

+0

@StanislavKvitash但提到的順序既不是升序,也不是降序。你將如何確保數組按照這個自定義順序排序?無法按特定順序推送項目,以便根據需要重新排列陣列。 – StrugglingCoder

回答

2

這個怎麼樣

var newA=dataList.filter(x=>x.status=='status-start').concat(dataList.filter(x=>x.status=='status-in-progress')).concat(dataList.filter(x=>x.status=='status-completed')) 
1

一旦你得到您的回覆,請執行下列操作:

dataList = response.items; 
    var currentBatches = []; 

    var statusStartItems = dataList.filter(function(item){ return item.status === 'status-start';}); 
    //Loop through status-start items and push into currentbatches array 
    statusStartItems.each(function(item){ 
     currentBatches.push(item); 
    } 

    var statusInItems = dataList.filter(function(item){ return item.status === 'status-in';}); 
    //Loop through status-in items and push into currentbatches array 
    statusInItems .each(function(item){ 
     currentBatches.push(item); 
    } 

..所以在

+0

我不認爲這是一個更好的解決方案 –

+0

這只是給出一個想法/方法。 –

0

我會創建可用選項的映射及其相應的順序,然後根據該映射對您的值進行排序以插入。然後,一旦排序迭代數組推送到您的目標數組。這或者你可以連接他們一旦排序產生一個新的數組。

const orderMap = { 
    'status-start': 0, 
    'status-in-progress': 1, 
    'status-completed': 2 
}; 

newData.sort((a, b) => { 
    return orderMap[a] - orderMap[b]; 
}).forEach(d => { 
    originalData.push(d); 
}); 

Heres a fiddle

顯然,你將需要改變對象的結構等,這僅僅是一個概念證明。這也是用ES6編寫的,所以沒有IE,但可以很容易地在ES5中編寫。


編輯:我看到你的排序是基於更新的演示,以反映子屬性status

https://jsfiddle.net/k0m2s1yt/2/

+0

地圖?一個「地圖」? – Crowes

+0

@Crowes我認爲你提到的事實即時通訊不使用ES6'地圖',而是一個簡單的對象?如果不是請詳細說明。 – ste2425

0

作爲一個選項,你也可以有可能被連接成一個結果,一個3個不同的排列:

var dataList = [ 
 
    {id: 11, status: 'status-start'}, 
 
    {id: 2, status: 'status-completed'}, 
 
    {id: 3, status: 'status-in-progress'}, 
 
    {id: 4, status: 'status-start'}, 
 
    {id: 5, status: 'status-completed'}, 
 
    {id: 6, status: 'status-in-progress'}, 
 
    {id: 7, status: 'status-start'}, 
 
    {id: 8, status: 'status-start'}, 
 
    {id: 9, status: 'status-in-progress'}, 
 
    {id: 10, status: 'status-start'}, 
 
    {id: 11, status: 'status-completed'}, 
 
    {id: 1, status: 'status-completed'} 
 
]; 
 

 
var currentBatches = [], 
 
currentStartedBatches = [], 
 
currentInProgressBatches = [{id: 200, status: 'status-in-progress'}], 
 
currentCompletedBatches = [{id: 12, status: 'status-completed'}, {id: 119, status: 'status-completed'}]; 
 

 
currentStartedBatches = currentStartedBatches.concat(dataList.filter(function(d){ return d.status ==='status-start' })); 
 

 
currentInProgressBatches = currentInProgressBatches.concat(dataList.filter(function(d){ return d.status ==='status-in-progress' })); 
 

 
currentCompletedBatches = currentCompletedBatches.concat(dataList.filter(function(d){ return d.status ==='status-completed' })); 
 

 
currentBatches = currentBatches.concat(currentStartedBatches).concat(currentInProgressBatches).concat(currentCompletedBatches); 
 

 
console.log(currentBatches);