一个简单的数组对象筛选题

/**

* 请用您认为最优化的方式,将arr中的type为4的数据过滤出来,

* 然后按相同的 name + date(按天)合并value(value累加),

* 然后按 value 降序(从大到小)排序,

* 最后每行按照 "${name},${本地日期},售出${sum(value)}部" 的格式,如:"小米2,2017年06月08日,售出5部", 打印(console.log)出来。

 

<script>
var arr = [
{name: '小米1', value: 1, type: 2, date: '2018-06-07T08:00:01.589Z'},
{name: '锤子T1', value: 1, type: 2, date: '2018-06-07T08:10:01.589Z'},
{name: '小米2', value: 1, type: 4, date: '2018-06-07T20:00:01.589Z'},
{name: '小米2', value: 4, type: 4, date: '2018-06-07T20:10:21.189Z'},
{name: '小米4', value: 1, type: 4, date: '2018-06-07T08:00:01.560Z'},
{name: '小米4', value: 2, type: 4, date: '2018-06-07T08:10:31.584Z'},
{name: '小米6', value: 1, type: 3, date: '2018-06-07T08:00:01.589Z'},
{name: '小米5s', value: 1, type: 4, date: '2018-06-07T08:00:01.589Z'},
{name: '锤子T2', value: 1, type: 4, date: '2018-06-07T08:00:01.589Z'},
{name: '锤子T1', value: 4, type: 4, date: '2018-06-07T08:06:01.589Z'},
{name: '魅蓝note5', value: 1, type: 4, date: '2018-06-07T08:00:01.589Z'},
{name: '魅蓝note2', value: 5, type: 4, date: '2018-06-02T08:07:01.589Z'},
{name: '魅蓝note2', value: 6, type: 4, date: '2018-06-07T08:00:01.589Z'},
{name: '魅蓝note3', value: 1, type: 4, date: '2018-06-05T08:00:01.589Z'},
{name: '魅蓝note', value: 1, type: 4, date: '2018-06-07T08:00:01.589Z'},
{name: 'oppor9', value: 7, type: 4, date: '2018-06-04T08:04:01.588Z'},
{name: '华为p9', value: 1, type: 4, date: '2018-06-02T08:00:01.577Z'},
{name: '华为p9', value: 2, type: 4, date: '2018-06-07T08:00:01.110Z'},
{name: '华为p10', value: 1, type: 1, date: '2018-06-07T08:00:01.534Z'}
];
  // 格式化时间 返回 年月日的格式
function forMatterDate(_date){
var date = new Date(_date);
var Y = date.getFullYear() + '年';
var M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '月';
var D = date.getDate() + '日';

return (Y+M+D);
}
  //比较俩个数的大小
function compare(property, desc) {
return function (a, b) {
var value1 = a[property];
var value2 = b[property];
if (desc == true) {                    //排序升序排列     
return value1 - value2;
} else {
return value2 - value1;
}
}
}
  //判断对象是否为空对象
function checkObj(object){
var _mark = false;
for(var _prop in object){
if (object[_prop]==='') {

}else {
_mark = true;
}
}
return _mark;
}
function printArray(arr) {
var _length = arr.length, i = 0, _arr = [], _objArr = [];
for (; i < _length; i++) {
if (arr[i].type == 4) {
_arr.push(arr[i]);
}
}
var $length = _arr.length - 1, _i = 0 ;
for (; _i < $length; _i++) {
var _obj = {};
if (_arr[_i].name == _arr[_i + 1].name) {
_obj['name'] = _arr[_i].name;
_obj.value = _arr[_i].value + _arr[_i + 1].value;
_obj.date = _arr[_i].date;
} else {

for (var z = 0, length = _objArr.length, _mark = false; z < length; z++) {
if (_objArr[z].name == _arr[_i].name) {
_mark = true;
}
}
if (_mark == false) {
_obj.name = _arr[_i].name;
_obj.value = _arr[_i].value;
_obj.date = _arr[_i].date;
}
}
if (checkObj(_obj) == false){

} else {
_objArr.push(_obj);
}

}
     //通过数组对象的某个键进行升降序排列
var _newObj = _objArr.sort(compare( 'value', false ));
_newObj.map( function (i , index){
var _data = _newObj[index];
var _value = _data.name + ',' + forMatterDate(_data.date) + ',' + _data.value + '部';
console.log(_value );
})


}

printArray(arr)

</script>

猜你喜欢

转载自www.cnblogs.com/xyyyy/p/10367148.html