插入对象以使数组保持排序

时间:2017-01-25 11:15:23

标签: javascript html angularjs typescript lodash

我有一个不同步骤的枚举

var array = [{"END" , "POSITIVE"}]

这将导致一个数组,每个步骤我都有一个对象。问题是我不会一次加载所有信息,所以我不能简单的for循环并按时间顺序推送每个项目。我可能是因为我首先加载第4步的值,所以我的数组将是:

var array = [{"END", "POSITIVE"}, {"TRANSPORT", "POSITIVE"}]

之后我会得到第2步的信息,然后我会:

var array = [undefined, undefined, undefined, undefined, undefined, undefined]

但这没有排序。

我该怎么办?我应该声明一个包含6个未定义值的数组

<body ononline="onlineConditions()" onoffline="offlineConditions()">(...)</body>

这样我每次更新后都不需要任何排序算法,只需将值推到正确的位置即可。

只是一些小信息:我使用AngularJS 1,Typescript和Lodash

2 个答案:

答案 0 :(得分:0)

在普通的Javascript中,您可以使用对象和键的指定值对其进行排序。

var StepCategory = { START: 0, POSITION_1: 1, TRANSPORT: 2, RECEIVER: 3, END: 4,  NO_STEP_MATCH: 5 },
    array = [["END", "POSITIVE"], ["TRANSPORT", "POSITIVE"]];

array.sort(function (a, b) {
    return StepCategory[a[0]] - StepCategory[b[0]];
});

console.log(array)

答案 1 :(得分:0)

首先,这是 - 正如评论中提到的那样 - 在语法上不正确:

var array = [{"END", "POSITIVE"}, {"TRANSPORT", "POSITIVE"}]

我认为这只是写这个问题的拼写错误。另外,如果你实际上使用数组中的枚举作为键并且只是出于演示目的而留下它,我希望你的对象数组看起来像这样:

var array = [{StepCategory.END: "POSITIVE"}, {StepCategory.TRANSPORT: "POSITIVE"}]

为了使用LoDash对此进行排序,您可以使用以下内容:

var sortedArray = _.sortBy(array, i => Object.keys(i)[0]);

这会根据每个对象的第一个键的值对您的数组进行排序,该值引用您的枚举值。