Javascript排序有两个属性
Javascript sorting with two properties
我正在努力排序两个级别。逻辑如下。如果任何对象都有状态,则返回最近的具有状态的对象。如果所有对象都没有状态,则返回最近的没有状态的对象。
var apps = [
{ status: 'PASS',
date_created: Thu Sep 03 2015 17:24:45 GMT-0700 (PDT)
},
{ status: 'FAIL',
date_created: Thu Sep 02 2015 17:24:45 GMT-0700 (PDT),
},
{ status: '',
date_created: Thu Sep 03 2015 17:24:45 GMT-0700 (PDT),
}
]
var desired_result = [{ status: 'PASS',
date_created: Thu Sep 03 2015 17:24:45 GMT-0700 (PDT)
}]
var apps_2 = [
{ status: '',
date_created: Thu Sep 03 2015 17:24:45 GMT-0700 (PDT)
},
{ status: '',
date_created: Thu Sep 02 2015 17:24:45 GMT-0700 (PDT),
},
{ status: '',
date_created: Thu Sep 01 2015 17:24:45 GMT-0700 (PDT),
}
]
var desired_resul2 = [{ status: '',
date_created: Thu Sep 03 2015 17:24:45 GMT-0700 (PDT)
}]
I've try
var sorted = _.sort_by(apps, function (x) { x.date_updated });
我也看了一些其他SO问题,但不能在第一次排序后保持对象到位。
如果我正确理解你的问题,这是你正在寻找的。http://jsfiddle.net/whxu5sea/3/
您需要过滤元素以确保它们具有任意类型的状态。然后按日期排序,最早的优先。然后得到第一个值。在我的例子中,我假设日期是字符串,但仍然应该工作。
var apps = [
{ status: 'PASS',
date_created: 'Thu Sep 03 2015 17:24:45 GMT-0700 (PDT)'
},
{ status: 'FAIL',
date_created: 'Thu Sep 02 2015 17:24:45 GMT-0700 (PDT)',
},
{ status: '',
date_created: 'Thu Sep 01 2015 17:24:45 GMT-0700 (PDT)',
}
];
var x;
var arr = _.filter(apps, function(data) {
return !!data.status.length;
});
x = _.chain( arr.length ? arr : apps )
.sortBy(function(data) {
return new Date(data.date_created).getTime();
}).last().value();
console.log( x );
检查在没有提供状态时是否工作:http://jsfiddle.net/whxu5sea/4/
我希望这对你有帮助。如果需要进一步澄清,请联系LMK。
编辑:更新获取最新元素
这是一个简单的解决方案,它只迭代一次apps
,没有过滤步骤。
这个概念是,如果status
是假的,它的日期被转换成一个负数,在所有假元素中保持正确的排序顺序,但使所有假元素的排序顺序低于所有非假元素的排序顺序。
我们通过减去8640000000000001来转换假元素日期,这是(日期中的最大毫秒数加1)。
var x = _.chain(apps).sortBy(function(x) {
var date = new Date(x.date_created).getTime();
return x.status ? date : date - 8640000000000001;
}).last().value();
console.log( x );
相关文章:
- 交换对象上两个属性的值
- 速度.js动画两个属性时持续时间不同
- JQuery选择:两个属性's值不相等
- 在ramda.js中将两个属性合并在一起
- 如何在培根中合并两个属性.js
- 基于两个属性从 javascript 中的对象数组中获取唯一数组
- 如何连接数组中对象的两个属性以用作ngOptions中的标签
- 在同一持续时间内对两个属性进行动画处理
- 使用 Object.defineProperties 提供两个属性
- 在 javascript 中用函数交换对象的两个属性
- 我可以在 D3 中一次指定两个属性吗?
- 角度“ng-repeat” - 如何仅过滤两个属性
- 我可以有两个属性名称相同的对象吗
- Linq.js:按两个属性(字段)分组
- 在量角器中,通过两个属性选择一个元素
- 如何通过两个属性定义元素
- 转换JSON数组的对象,从两个属性值创建新的属性
- 检查一个元素是否存在两个属性
- Javascript排序有两个属性
- 在单个元素上使用new/isolated作用域的两个属性指令