大佬教程收集整理的这篇文章主要介绍了我想根据我的结果制作自定义对象数组 我得到的结果,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
基本上我知道数组,它是原型方法, 我试图通过使用 new Set()、map 和 filter 来获得结果。 但不知何故,我在某个时候卡住了以获得想要的结果。
以下是有关问题的详细信息以及我想要的结果。
let arr = [
{
Date: "2021-05-01",Status: "incomplete",},{
Date: "2021-05-07",{
Date: "2021-05-31",Status: "Complete",];
我想像下面这样转换这个结果, 注意:基于日期。
finalResult = [
{
Date: "2021-05-01",Incompleted: 1,Completed: 0,@R_294_10586@l: 1,Completed: 1,@R_294_10586@l: 2,];
感谢您的贡献
您可以结合使用 Set
和 @H_314_9@map 函数来做到这一点。首先,您必须从数组中提取唯一日期。我们可以使用 @H_314_9@map 过滤掉日期,然后使用 Set
只保留唯一值。从此处了解有关集合的更多信息:JavaScript Set
const dates = [...new Set(arr.map(a => a.DatE))]
现在我们的 dates
数组中有唯一的三个日期,我们可以轻松地遍历每个日期并计算下一个日期的 complete
和 incomplete
任务。
const final = dates.map(date => {
const incomplete = arr.filter(a => a.Date == date && a.Status == "incomplete").length
const complete = arr.filter(a => a.Date == date && a.Status == "Complete").length
return {
Date: date,Incompleted: incomplete,Completed: complete,@R_294_10586@l: complete + incomplete
}
})
最后:-
let arr = [
{
Date: "2021-05-01",Status: "incomplete",},{
Date: "2021-05-07",{
Date: "2021-05-31",Status: "Complete",];
const dates = [...new Set(arr.map( a => a.Date ))]
const final = dates.map( date => {
const incomplete = arr.filter(a => a.Date == date && a.Status == "incomplete").length
const complete = arr.filter(a => a.Date == date && a.Status == "Complete").length
return {
Date: date,@R_294_10586@l: complete + incomplete
}
})
console.log(final)
,
您可以使用数组 reduce
函数来解决您的问题。它只遍历数组一次。我们创建一个以日期为键的新对象。如果对象中尚不存在日期,则会为其创建一个新的空条目。然后它将现有条目与当前元素合并。
最后,我们需要使用 Object.values
再次将其转换为数组。
const uniqueDates = arr.reduce((acc,cur) => {
const exisTing = acc[cur.date] ?? createEmpty(cur);
return {...acc,[cur.date]: merge(exisTing,cur) }
},{})
const finalResult = Object.values(uniqueDates);
function createEmpty({ date }) {
return { date,incompleted: 0,completed: 0,@R_294_10586@l: 0 }
}
function merge(exisTing,{ status }) {
return {
...exisTing,incompleted: exisTing.incompleted + status === 'incomplete',completed: exisTing.completed + status === 'Complete',@R_294_10586@l: exisTing.@R_294_10586@l + 1
}
}
,
您可以为任意数量的 status
设置动态。
Set
的 status
以获取所有唯一状态Object.fromEntries
。它看起来像这样:{ "incomplete": 0,"Complete": 0 }
group
对象,其中每个 Date
作为键和输出中所需的对象作为其值。
const arr = [{Date:"2021-05-01",Status:"incomplete",{Date:"2021-05-07",{Date:"2021-05-31",Status:"Complete",}],unique = new Set(arr.map(a => a.Status)),initial = Object.fromEntries( Array.from(unique,s => [s,0]) ),group = { }
for (const { Date,Status } of arr) {
group[Date] ||= { Date,...initial,@R_294_10586@l: 0 };
group[Date][Status]++;
group[Date].@R_294_10586@l++
}
const output = Object.values(group)
console.log( output )
,
你可以简单地使用 forEach 循环......
let arr = [
{
Date: "2021-05-01",{
Date: "2021-05-07",{
Date: "2021-05-31",Status: "incompleted",]
let finalResult = []
const getDateEntryIndex = (datE) => {
let index = undefined
finalResult.forEach((element,i) => {
if(element.Date == datE) {
index = i
}
})
return index
}
arr.forEach(element => {
let index = getDateEntryIndex(element.DatE)
if(indeX) {
if(element.Status == "Complete") {
finalresult[index].Completed++
} else {
finalresult[index].Incompleted++
}
finalresult[index].@R_294_10586@l++
} else {
finalResult.push({
Date: element.Date,Incompleted: element.Status == "incompleted" ? 1 : 0,Completed: element.Status == "Complete" ? 1 : 0,@R_294_10586@l: 1
})
}
})
console.log(finalResult)
以上是大佬教程为你收集整理的我想根据我的结果制作自定义对象数组 我得到的结果全部内容,希望文章能够帮你解决我想根据我的结果制作自定义对象数组 我得到的结果所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。