Javascript Appcelerator钛/合金型号:如何修改此排序方法以对包含数字的字符串进行排序

Javascript Appcelerator钛/合金型号:如何修改此排序方法以对包含数字的字符串进行排序,javascript,sorting,titanium,appcelerator,titanium-alloy,Javascript,Sorting,Titanium,Appcelerator,Titanium Alloy,我已经在Appcelerator中创建了一个模型,它具有排序方法。日期属性之一是仅包含数字的字符串。我需要按升序或降序排序,就像它是一个整数一样。但是,由于该字段是UTC日期时间戳,有时较旧日期的数字较少,且以较高的数字开头,因此,按最近日期排序时,这些日期位于顶部,按最旧日期排序时,这些日期位于底部 这是我的模型文件: 如何修改上述代码以解决此问题 请记住,我仍然需要其他属性,这些属性是要按常规排序的字符串,例如名称、位置等。最好的方法是在比较之前将日期转换为整数,简单地说: 您需要为排序字段

我已经在Appcelerator中创建了一个模型,它具有排序方法。日期属性之一是仅包含数字的字符串。我需要按升序或降序排序,就像它是一个整数一样。但是,由于该字段是UTC日期时间戳,有时较旧日期的数字较少,且以较高的数字开头,因此,按最近日期排序时,这些日期位于顶部,按最旧日期排序时,这些日期位于底部

这是我的模型文件:

如何修改上述代码以解决此问题


请记住,我仍然需要其他属性,这些属性是要按常规排序的字符串,例如名称、位置等。

最好的方法是在比较之前将日期转换为整数,简单地说:

您需要为排序字段声明一个局部变量,与方向相同:

var field = this.sortField;
在if语句之前添加以下内容:

if (field == "date") {
    a = parseInt(a);
    b = parseInt(b);
}
可能需要像在代码中一样添加对void的检查

那么完整的答案是:

    sortBy: function (iterator, context) {
            var obj = this.models;
            var direction = this.sortDirection;
            var field = this.sortField;

            return _.pluck(_.map(obj, function (value, index, list) {
                return {
                    value: value,
                    index: index,
                    criteria: iterator.call(context, value, index, list)
                };
            }).sort(function (left, right) {
                // swap a and b for reverse sort
                var a = direction === "ASC" ? left.criteria : right.criteria;
                var b = direction === "ASC" ? right.criteria : left.criteria;

                if (field == "date") {
                    a = parseInt(a);
                    b = parseInt(b);
                }

                if (a !== b) {
                    if (a > b || a === void 0) return 1;
                    if (a < b || b === void 0) return -1;
                }
                return left.index < right.index ? -1 : 1;
            }), 'value');
        }

我理解您的答案的概念,但是我如何才能在我的代码的sortBy函数中发现该字段是date?我不知道如何获取这些信息。我想我已经解释过了,下面是完整的功能:
if (field == "date") {
    a = parseInt(a);
    b = parseInt(b);
}
    sortBy: function (iterator, context) {
            var obj = this.models;
            var direction = this.sortDirection;
            var field = this.sortField;

            return _.pluck(_.map(obj, function (value, index, list) {
                return {
                    value: value,
                    index: index,
                    criteria: iterator.call(context, value, index, list)
                };
            }).sort(function (left, right) {
                // swap a and b for reverse sort
                var a = direction === "ASC" ? left.criteria : right.criteria;
                var b = direction === "ASC" ? right.criteria : left.criteria;

                if (field == "date") {
                    a = parseInt(a);
                    b = parseInt(b);
                }

                if (a !== b) {
                    if (a > b || a === void 0) return 1;
                    if (a < b || b === void 0) return -1;
                }
                return left.index < right.index ? -1 : 1;
            }), 'value');
        }