const list = [
{
name: "张三",
id: 1,
amount: 1,
balance: 1,
date: "2022-01-02",
},
{
name: "张三",
id: 2,
amount: 1,
balance: 1,
date: "2022-01-04",
},
{
name: "张三",
id: 3,
amount: 15,
balance: 15,
date: "2022-01-05",
},
{
name: '张三',
id: 33,
amount: 33,
balance: 33,
date: '2022-01-05'
},
{
name: "张三",
id: 4,
amount: 1,
balance: 1,
date: "2022-02-01",
},
{
name: "张三",
id: 5,
amount: 1,
balance: 1,
date: "2022-02-02",
},
{
name: "张三",
id: 6,
amount: 26,
balance: 26,
date: "2022-02-06",
},
{
name: '张三',
id: 66,
amount: 66,
balance: 66,
date: '2022-02-06'
},
{
name: "李四",
id: 7,
amount: 1,
balance: 1,
date: "2022-01-02",
},
{
name: "李四",
id: 8,
amount: 1,
balance: 1,
date: "2022-01-03",
},
{
name: "李四",
id: 9,
amount: 215,
balance: 215,
date: "2022-01-05",
},
{
name: "李四",
id: 10,
amount: 1,
balance: 1,
date: "2022-02-01",
},
{
name: "李四",
id: 11,
amount: 1,
balance: 1,
date: "2022-02-03",
},
{
name: "李四",
id: 12,
amount: 225,
balance: 225,
date: "2022-02-05",
},
{
name: "李四",
id: 13,
amount: 1,
balance: 1,
date: "2022-03-01",
},
{
name: "李四",
id: 14,
amount: 1,
balance: 1,
date: "2022-03-05",
},
{
name: "李四",
id: 15,
amount: 236,
balance: 236,
date: "2022-03-06",
},
{
name: "李四",
id: 16,
amount: 212,
balance: 212,
date: "2022-03-06",
},
{
name: "李四",
id: 17,
amount: 234,
balance: 234,
date: "2022-03-06",
}
];
[{
name: '张三',
id: 33,
amount: 15,
balance: 15,
date: '2022-01-05'
},{
name: '张三',
id: 66,
amount: 26,
balance: 26,
date: '2022-02-06'
},{
name: '李四',
id: 9,
amount: 215,
balance: 215,
date: '2022-01-05'
},{
name: '李四',
id: 12
amount: 225,
balance: 225,
date: '2022-02-05'
},{
name: '李四',
id: 17,
amount: 234,
balance: 234,
date: '2022-03-06'
}]
OK 稍等
代码如下
const list = [
{
name: "张三",
id: 1,
amount: 1,
balance: 1,
date: "2022-01-02",
},
{
name: "张三",
id: 2,
amount: 1,
balance: 1,
date: "2022-01-04",
},
{
name: "张三",
id: 3,
amount: 15,
balance: 15,
date: "2022-01-05",
},
{
name: '张三',
id: 33,
amount: 33,
balance: 33,
date: '2022-01-05'
},
{
name: "张三",
id: 4,
amount: 1,
balance: 1,
date: "2022-02-01",
},
{
name: "张三",
id: 5,
amount: 1,
balance: 1,
date: "2022-02-02",
},
{
name: "张三",
id: 6,
amount: 26,
balance: 26,
date: "2022-02-06",
},
{
name: '张三',
id: 66,
amount: 66,
balance: 66,
date: '2022-02-06'
},
{
name: "李四",
id: 7,
amount: 1,
balance: 1,
date: "2022-01-02",
},
{
name: "李四",
id: 8,
amount: 1,
balance: 1,
date: "2022-01-03",
},
{
name: "李四",
id: 9,
amount: 215,
balance: 215,
date: "2022-01-05",
},
{
name: "李四",
id: 10,
amount: 1,
balance: 1,
date: "2022-02-01",
},
{
name: "李四",
id: 11,
amount: 1,
balance: 1,
date: "2022-02-03",
},
{
name: "李四",
id: 12,
amount: 225,
balance: 225,
date: "2022-02-05",
},
{
name: "李四",
id: 13,
amount: 1,
balance: 1,
date: "2022-03-01",
},
{
name: "李四",
id: 14,
amount: 1,
balance: 1,
date: "2022-03-05",
},
{
name: "李四",
id: 15,
amount: 236,
balance: 236,
date: "2022-03-06",
},
{
name: "李四",
id: 16,
amount: 212,
balance: 212,
date: "2022-03-06",
},
{
name: "李四",
id: 17,
amount: 234,
balance: 234,
date: "2022-03-06",
}
];
[{
name: '张三',
id: 33,
amount: 15,
balance: 15,
date: '2022-01-05'
},{
name: '张三',
id: 66,
amount: 26,
balance: 26,
date: '2022-02-06'
},{
name: '李四',
id: 9,
amount: 215,
balance: 215,
date: '2022-01-05'
},{
name: '李四',
id: 12,
amount: 225,
balance: 225,
date: '2022-02-05'
},{
name: '李四',
id: 17,
amount: 234,
balance: 234,
date: '2022-03-06'
}]
let totalDict = {};
list.forEach(
item=>{
let dates = item["date"].split("-");
let name = item["name"];
let year = dates[0];
let month = dates[1];
let day = dates[2];
if (!totalDict.hasOwnProperty(name)) {
totalDict[name] = {};
}
if (!totalDict[name].hasOwnProperty(year)) {
totalDict[name][year] = {};
}
if (!totalDict[name][year].hasOwnProperty(month)) {
totalDict[name][year][month] = "0";
}
if (day > totalDict[name][year][month]) {
totalDict[name][year][month] = {
'flag': false,
'day': day
};
}
}
);
let newList = [];
list.forEach((item) => {
let name = item["name"];
let dates = item["date"].split("-");
let year = dates[0];
let month = dates[1];
let day = dates[2];
if (
totalDict[name][year][month]['day'] === day && totalDict[name][year][month]['flag'] === false
) {
newList.push(item);
totalDict[name][year][month]['flag'] === true
}
});
console.log(newList);
// 需要整理成如下格式
// [{
// name: '张三',
// amount: 15,
// balance: 15,
// date: '2022-01-05'
// },{
// name: '张三',
// amount: 26,
// balance: 26,
// date: '2022-02-06'
// },{
// name: '李四',
// amount: 215,
// balance: 215,
// date: '2022-01-05'
// },{
// name: '李四',
// amount: 225,
// balance: 225,
// date: '2022-02-05'
// },{
// name: '李四',
// amount: 236,
// balance: 236,
// date: '2022-03-06'
// }]
你是想要 月份相等名称相等 系数最大是嘛?
//先记录为对象
var Result = {};
list.forEach(function(item,index){
//以姓名和年月作为关键字
var key =item.name + '_' + item.date.substring(0,7);
//当第一次出现关键字或者当前项的值大于之前的就当前项记录
if(!Result[key] || Result[key].amount<item.amount){
Result[key] = item;
}
});
console.log(Result);
//转数组
var ResultArr = [];
for(var key in Result){
ResultArr.push(Result[key]);
}
console.log(ResultArr);
function getNewData(list){
for(let x in list){
list[x].date = list[x].date.split('-')
}
let newArr = []
for(let i=0;i<list.length;i++){
if(i!=0 && list[i].name==newArr[newArr.length-1].name && list[i].date[0]==newArr[newArr.length-1].date[0] && list[i].date[1]==newArr[newArr.length-1].date[1]){
continue;
}
else{
let obj = list[i]
for(let j=i;j<list.length;j++){
if(obj.name==list[j].name && obj.date[0]==list[j].date[0] && obj.date[1]==list[j].date[1] && obj.date[2]<list[j].date[2]){
obj = list[j]
}
}
newArr.push(obj)
}
}
for(let x in newArr){
newArr[x].date = newArr[x].date.join("-")
}
return newArr
}
给个例子做参考:
var new_list = [];
while(list.length>1){
let info = list[0]
let info1 = list[1];
let name = info.name;
let name1 = info1.name;
let date = info.date.split('-');
let date1 = info1.date.split('-');
if(name==name1 && date[0]==date1[0] && date[1]==date1[1]){
if(parseInt(date[2])>parseInt(date1[2])){
list.splice(0,1);
}else{
list.shift();
}
if(list.length==1){
new_list.push(list[0]);
}
}else if(name==name1 && date[0]==date1[0] && date[1]!=date1[1]){
new_list.push(list[0]);
list.shift();
}else if(name!=name1){
new_list.push(list[0]);
list.shift();
}
}
console.log(new_list);
用了es6 的 map
const getArrayMax = (arr) => {
let map = new Map()
for (let item of arr) {
const temp = item.date.substring(0,7)+'_'+item.name
if (!map.has(temp) || item.amount > map.get(temp).amount) {
map.set(temp, item)
}
}
return [...map.values()]
}
console.log('arr', getArrayMax(list))
const tempMonthArr=[];
for(var i=0;i<list.length;i++){
list[i].month=list[i].date.substring(0,7);
list[i].day= parseInt(list[i].date.substring(8));
var t= tempMonthArr.filter(item => {
return item.month==list[i].month && item.name==list[i].name;
})
if( t&&t.length>0){
var obj=t[0];
//存在比对天数
if(obj.day<=list[i].day){
obj.date=list[i].date;
obj.day=list[i].day;
}
}else{
//不存在放入临时数组
tempMonthArr.push(list[i]);
}
}
console.log(tempMonthArr);
Object.values(list.reduce((p, c) => {
const dt = new Date(c.date)
const k = ${ dt.getFullYear() }-${ dt.getMonth() + 1 }
if (Object.keys(p).length === 0) {
p = {
[k]: [c]
}
} else {
if (p[k]) {
p[k].push(c)
} else {
p[k] = [c]
}
}
return p
}, {})).map(list => list.sort((e1, e2) => new Date(e2.date).getTime() - new Date(e1.date).getTime()).shift())
const getMax = (v) => {
let map = new Map()
for (let item of v) {
const temp = item.date.substring(0,7)+'_'+item.name
if (!map.has(temp) || item.amount > map.get(temp).amount) {
map.set(temp, item)
}
}
return [...map.values()]
}
console.log(getMax(list))
参考如下代码可实现
var array2=[];
if(list && list.length>0){
list.forEach((ele,index)=>{
if(array2 && array2.length>0){
for(var i=0;i<array2.length;i++){
var time1=new Date(Date.parse(ele.date))
var time2=new Date(Date.parse(array2[i].date))
var timeMonth1=time1.getFullYear()+""+time1.getMonth()
var timeMonth2=time2.getFullYear()+""+time2.getMonth()
if(array2[i].name==ele.name && timeMonth1==timeMonth2){
if(time1 > time2 || ele.id>array2[i].id){
array2[i]=ele
}
}
else{
array2.push(ele)
}
}
array2=this.unique(array2)
}
else{
array2.push(ele)
}
})
}
},
unique(arr) {
const res = new Map();
return arr.filter((arr) => !res.has(arr.id) && res.set(arr.id, 1));
},
本题思路我认为可以分成三个部分,首先要“”不同Id“”,其次相同的日期(至少年月是相同的天数不同)和相同的名称(也就是name)
其实开发中可以select数据库语句就可以了,可见楼主也是小菜鸟一个(抱歉我这么称呼),解题思路首先对id 排序,然后对每个id的相同日期和名称的item进行排序,最后比较天数,取最大的那个天数,这样对数据进行重新整理,就能得到你想要的数据,比如id=1
其中日期和名称相同的数据,然后天数取最大的一个,所以对每个(i=0;i<list.length;i++)进行list.id判断,和进行list.name判断,截取数据date用函数subString(start,end)函数截取后两个数据,然后比较数据大小用math.max()函数就可以了,
已解决!
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<style>
</style>
<body>
</body>
<script>
const list = [
{
name: "张三",
id: 1,
amount: 1,
balance: 1,
date: "2022-01-02",
},
{
name: "张三",
id: 2,
amount: 1,
balance: 1,
date: "2022-01-04",
},
{
name: "张三",
id: 3,
amount: 15,
balance: 15,
date: "2022-01-05",
},
{
name: '张三',
id: 33,
amount: 33,
balance: 33,
date: '2022-01-05'
},
{
name: "张三",
id: 4,
amount: 1,
balance: 1,
date: "2022-02-01",
},
{
name: "张三",
id: 5,
amount: 1,
balance: 1,
date: "2022-02-02",
},
{
name: "张三",
id: 6,
amount: 26,
balance: 26,
date: "2022-02-06",
},
{
name: '张三',
id: 66,
amount: 66,
balance: 66,
date: '2022-02-06'
},
{
name: "李四",
id: 7,
amount: 1,
balance: 1,
date: "2022-01-02",
},
{
name: "李四",
id: 8,
amount: 1,
balance: 1,
date: "2022-01-03",
},
{
name: "李四",
id: 9,
amount: 215,
balance: 215,
date: "2022-01-05",
},
{
name: "李四",
id: 10,
amount: 1,
balance: 1,
date: "2022-02-01",
},
{
name: "李四",
id: 11,
amount: 1,
balance: 1,
date: "2022-02-03",
},
{
name: "李四",
id: 12,
amount: 225,
balance: 225,
date: "2022-02-05",
},
{
name: "李四",
id: 13,
amount: 1,
balance: 1,
date: "2022-03-01",
},
{
name: "李四",
id: 14,
amount: 1,
balance: 1,
date: "2022-03-05",
},
{
name: "李四",
id: 15,
amount: 236,
balance: 236,
date: "2022-03-06",
},
{
name: "李四",
id: 16,
amount: 212,
balance: 212,
date: "2022-03-06",
},
{
name: "李四",
id: 17,
amount: 234,
balance: 234,
date: "2022-03-06",
}
];
// 获取数组对象中,不同id,相同日期和名称中最大的一天
function max({ different = [], TheSame = [], arr = [], target = "", type = 'all' }) {
// console.log(TheSame, different, '===')
let total = [];
arr.forEach((item, index) => {
let i = total.findIndex((sitem, sindex) => {
if (sitem) {
// console.log(sitem, '==sitem')
return sitem.some((kitem) => {
return TheSame.every(hitem => {
return kitem[hitem] == item[hitem]
})
})
}
})
if (i != -1) {
total[i].push(item)
} else {
total.push([item])
}
})
let List = total.map((item) => {
return Math.max.apply(null, item.map((item => {
if (typeof item[target] == 'string' && item[target].indexOf('-')) {
return item[target].replace(/-/g, '') * 1
} else if (typeof item[target] == 'number') {
return item[target]
} else {
return 0
}
})));
})
if (type == 'all') {
let maxList = total.map((item, index) => {
return item.find(zitem => {
if (typeof zitem[target] == 'string' && zitem[target].indexOf('-')) {
return zitem[target].replace(/-/g, '') == List[index]
} else if (typeof zitem[target] == 'number') {
return zitem[target] == List[index]
} else {
return 0
}
})
})
return maxList
} else if (type == 'every') {
let max = Math.max(...List)
let maxList = arr.filter((item, index) => {
return item[target] == max
})
return maxList
}
}
// console.log(list.length, '===')
console.log(max({ different: ['id'], TheSame: ['date', 'name'], arr: list, target: 'id', type: 'every' }))
// different 不同参数
// TheSame 相同参数
// arr 传入参数
// target 最大参数
// type 分类类型 every 数组最最大一个 all 分类最大数据
</script>
</html>