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 != '' );