例如,如果我有一个像这样的数组对象
let arr = [
{
id: 'stringId_01',
model1: {
name: 'course_name1',
time: '10:00'
}
},
{
id: 'stringId_02',
model1: {
name: 'course_name2',
time: '11:00'
}
},
{
id: 'stringId_01',
model1: {
name: 'course_name3',
time: '09:00'
}
},
{
id: 'stringId_03',
model1: {
name: 'course_name_01',
time: '10:00'
}
}
]
我尝试以文本形式输出,以便我可以使用节点调度程序发送电子邮件通知。
我可以得到单个文本
的输出output
- course_name1 10:00
- course_name2 11:00
- course_name3 09:00
- course_name_01 10:00
但是,在这种情况下,stringId_01的用户将收到两个单独的电子邮件通知。
如何得到这样的输出文本,以便stringId_01的用户将收到一个电子邮件通知
output
- course_name1 10:00, course_name3 09:00
- course_name2 11:00
- course_name_01 10:00
您可以使用Set
和扩展语法获得唯一id,并使用Array.map
循环遍历生成的数组。
在循环中,使用Array.filter
来获取数组中具有相同id
的项。Array.map
和Array.join
用于获得所需的输出字符串。
let arr=[{id:"stringId_01",model1:{name:"course_name1",time:"10:00"}},{id:"stringId_02",model1:{name:"course_name2",time:"11:00"}},{id:"stringId_01",model1:{name:"course_name3",time:"09:00"}},{id:"stringId_03",model1:{name:"course_name_01",time:"10:00"}}];
const uniqueIDs = [...new Set(arr.map(e => e.id))]
uniqueIDs.forEach(e => {
const str = '- ' + arr.filter(f => f.id == e).map(e => e.model1.name + ' ' + e.model1.time).join(', ')
console.log(str)
})
如果你想把它作为一个字符串:
let arr=[{id:"stringId_01",model1:{name:"course_name1",time:"10:00"}},{id:"stringId_02",model1:{name:"course_name2",time:"11:00"}},{id:"stringId_01",model1:{name:"course_name3",time:"09:00"}},{id:"stringId_03",model1:{name:"course_name_01",time:"10:00"}}];
const uniqueIDs = [...new Set(arr.map(e => e.id))]
const str = uniqueIDs.map(e => '- ' + arr.filter(f => f.id == e).map(e => e.model1.name + ' ' + e.model1.time).join(', ')).join('n')
console.log(str)
我将这样做:
var course={}
for(i=0;i<arr.length;i++){
var comma ="";
if(course[arr[i].id]=== undefined)
{
course[arr[i].id]="- " ;
}
else
{
comma=", " ;
}
course[arr[i].id]+=comma+(arr[i].model1.name + " " +arr[i].model1.time) ;
}
var result=""
for (var prop in course) {
result+=course[prop] +"n" ;
}
console.log(result);
console.log(course);