Javascript 如果一个为空,则从对象获取另一个值
我有一些像这样的东西Javascript 如果一个为空,则从对象获取另一个值,javascript,arrays,angular,loops,Javascript,Arrays,Angular,Loops,我有一些像这样的东西 outgoingInvoices = [{ invoiceRecipientName: "Test" invoiceResourceId: "20.pdf" }, { invoiceRecipientName: "Test" invoiceResourceId: "" }, { invoiceRecipientName: "Test" invoic
outgoingInvoices = [{
invoiceRecipientName: "Test"
invoiceResourceId: "20.pdf"
},
{
invoiceRecipientName: "Test"
invoiceResourceId: ""
},
{
invoiceRecipientName: "Test"
invoiceResourceId: "20.pdf"
}.
];
我需要先从这样的物体开始,这不是问题
this.invoiceResourceId[0].invoiceResourceId;
但我有一个问题,如果第一个没有值,那么我必须取第二个,如果第二个没有值,那么取第三个,依此类推。如果任何人中没有值,则为null:(
我尝试过for循环,但我认为在ES6中有更好的方法?您可以将数组映射到只有
invoiceResourceId
的数组,然后过滤它以删除null
s,如果生成的数组为空,只需返回null
const resourceIds = outgoingInvoices.map(x => x.invoiceResourceId).filter(y => y);
const result = resourceIds.length ? resourceIds[0] : null;
我个人不认为循环有任何问题(当它们是合适的解决方案时),但如果您要以“函数式编程方式”进行操作,则可以使用Array.prototype.reduce:
outgoingInvoices.reduce((prev, curr) => {
return prev || curr.invoiceResourceId;
}, null)
您应该使用
数组。查找。它将返回第一个匹配的对象或null
var支出风险=[{
invoiceRecipientName:“测试”,
invoiceResourceId:“
},
{
invoiceRecipientName:“测试”,
invoiceResourceId:“abc”
},
{
invoiceRecipientName:“测试”,
invoiceResourceId:“20.pdf”
}
];
var发票=支出发票。查找((投资)=>!!投资发票资源ID);
var输出=!!发票?发票。发票资源ID:发票;
log(输出)
您可以简单地将数组减少到第一个非假值
const firstNonFalse=outgoingInvoices.reduce(
(acc,发票)=>acc | | invoice.invoiceResourceId,
空)
null,作为reduce方法中的最后一个参数,设置acc的默认值。是,您可以使用:
对不起,我的错误,如果第一个没有值,我已经编辑了这个问题,对不起
outgoingInvoices.find( invoice => invoice.invoiceResourceId != '' );