gpt4 book ai didi

javascript - 如果使用 Array.filter(?) 未定义值,则删除父对象和子对象

转载 作者:行者123 更新时间:2023-11-30 09:41:43 25 4
gpt4 key购买 nike

问题:

我如何删除所有空的 emailAddress,如果没有 emailAddresses 批准,也删除该批准。

我当前的解决方案将在 emailAddress 完全为空时删除批准。但当存在两个 emailAddresses 而其中一个为空时(参见脚本输出与预期输出)

var request = {
approvals: [
{
type: 'media',
emailAddresses: [
{emailAddress: 'frank@gmail.com'},
]
},
{
type: 'other',
emailAddresses: [
{emailAddress: ''},
]
},
{
type: 'scope',
emailAddresses: [
{emailAddress: 'kelly@yahoo.com'},
{emailAddress: ''},
]
}
]
}
const filterOutEmptyEmails = (approval) => {
if(approval.emailAddresses.filter(x => !!x.emailAddress).length){
return true;
}

}

let output = request.approvals.filter(filterOutEmptyEmails);

console.log(JSON.stringify(output));

// EXPECTED OUTPUT:
// approval: [
// {
// type: 'media',
// emailAddresses: [
// {emailAddress: 'frank@gmail.com'},
// ]
// },
// {
// type: 'scope',
// emailAddresses: [
// {emailAddress: 'kelly@yahoo.com'},
// ]
// }
// ]
// }]

Live Code

最佳答案

您没有替换代码中的 approval.emailAddresses - 您应该使用:

approval.emailAddresses = approval.emailAddresses.filter(x => !!x.emailAddress);

请看下面的演示:

var request={approvals:[{type:'media',emailAddresses:[{emailAddress:'frank@gmail.com'},]},{type:'other',emailAddresses:[{emailAddress:''},]},{type:'scope',emailAddresses:[{emailAddress:'kelly@yahoo.com'},{emailAddress:''},]}]};

var filterOutEmptyEmails = (approval) => {
approval.emailAddresses = approval.emailAddresses.filter(x => !!x.emailAddress);
if(approval.emailAddresses.length){
return true;
}
}

var output = request.approvals.filter(filterOutEmptyEmails);

console.log(JSON.stringify(output));

编辑:

另一个不改变输入数组的提议 - 使用 Array.prototype.reduce 创建一个新数组:

var request={approvals:[{type:'media',emailAddresses:[{emailAddress:'frank@gmail.com'},]},{type:'other',emailAddresses:[{emailAddress:''},]},{type:'scope',emailAddresses:[{emailAddress:'kelly@yahoo.com'},{emailAddress:''},]}]};


var output = request.approvals.reduce(function(p,c){
// creates a shallow copy
var elem = Object.assign({},c);
// replaces the reference to request.approvals by the new array created by the filter
elem.emailAddresses = elem.emailAddresses.filter(x => !!x.emailAddress);
if(elem.emailAddresses.length != 0)
p.push(elem);
return p;
},[]);

// console.log(request.approvals);
console.log(output);
.as-console-wrapper{top:0;max-height:100%!important;}

关于javascript - 如果使用 Array.filter(?) 未定义值,则删除父对象和子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40879659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com