Javascript 按特定顺序创建新数组
一旦解决了一个特定的承诺,我希望遍历响应中的每个项,并按特定顺序将它们推送到一个数组中Javascript 按特定顺序创建新数组,javascript,angularjs,Javascript,Angularjs,一旦解决了一个特定的承诺,我希望遍历响应中的每个项,并按特定顺序将它们推送到一个数组中 状态开始 正在进行的状态 状态已完成 我该怎么做呢?以下是我目前的代码: dashService.getBatches(refresh) .then(function (response) { if (response.error) { console.log("No data received"); } else { angular.forEach(response.items, f
状态开始
正在进行的状态
状态已完成
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);
}
});
}
});
收到回复后,请执行以下操作:
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);
}
…等等这个怎么样
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'))
我将创建一个可用选项及其对应顺序的映射,然后根据该映射对要插入的值进行排序。然后在排序后,迭代数组,将它们推送到目标数组中。或者,您可以对它们进行一次排序,以生成一个新数组
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);
});
显然,您需要更改对象结构等,这只是一个概念证明。这也是用ES6编写的,所以没有IE,但可以很容易地用ES5编写
编辑:我看到您的排序基于子属性
状态
更新了演示以反映这一点
作为一个选项,您还可以拥有3个不同的数组,这些数组可以连接成一个结果数组:
var数据列表=[
{id:11,状态:'status start'},
{id:2,状态:'状态已完成'},
{id:3,状态:'状态正在进行'},
{id:4,状态:'status start'},
{id:5,状态:'状态已完成'},
{id:6,状态:'状态正在进行'},
{id:7,状态:'status start'},
{id:8,状态:'status start'},
{id:9,状态:'状态正在进行'},
{id:10,状态:'status start'},
{id:11,状态:'状态已完成'},
{id:1,状态:“状态已完成”}
];
var currentBatches=[],
currentStartedBatches=[],
currentInProgressBatches=[{id:200,状态:'status in progress'}],
currentCompletedBatches=[{id:12,状态:'status completed'},{id:119,状态:'status completed'}];
currentStartedBatches=currentStartedBatches.concat(dataList.filter(函数(d){return d.status=='status-start'}));
currentInProgressBatches=currentInProgressBatches.concat(dataList.filter(函数(d){return d.status==='status-in-progress'}));
currentCompletedBatches=currentCompletedBatches.concat(dataList.filter(函数(d){return d.status=='status-completed'}));
currentBatches=currentBatchs.concat(currentStartedBatchs).concat(currentInProgressBatchs).concat(currentCompletedBatchs);
console.log(当前批处理)代码>也许对结果数组进行排序更容易?或者你有更复杂的用例吗?@StanislavKvitash,但是提到的顺序既不是升序也不是降序。如何确保数组按此自定义顺序排序?我不能按特定顺序推送项目,以便阵列本身根据需要重新排列。我不认为这是一个更好的解决方案。这只是给出一个想法/方法。一张地图?map
?@Crowes我想你指的是这样一个事实:我使用的不是ES6map
,而是一个简单的对象?如果没有,请详细说明。