Получить другой объект формы значения, если один пустой угол 6 - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть какой-то объект, подобный этому

outgoingInvoices = [{
        invoiceRecipientName: "Test"
        invoiceResourceId: "20.pdf"
    },
    {
        invoiceRecipientName: "Test"
        invoiceResourceId: ""
    },
    {
        invoiceRecipientName: "Test"
        invoiceResourceId: "20.pdf"
    }.
];

Мне нужно сначала получить объект, подобный этому, не проблема

this.invoiceResourceId[0].invoiceResourceId;

Но у меня проблема, что если нет значенияв первом случае я должен взять второй, если во втором нет значения, взять третий и так далее.И быть нулевым, если ни у кого нет значения: (

Я пробовал цикл, но я думаю, что в ES6 есть лучший способ?

Ответы [ 5 ]

0 голосов
/ 14 декабря 2018

Да, вы можете использовать #find:

outgoingInvoices.find( invoice => invoice.invoiceResourceId != '' );
0 голосов
/ 14 декабря 2018

Вы можете просто уменьшить массив до первого не ложного значения

const firstNonFalse = outgoingInvoices.reduce( (acc,invoice)=> acc || invoice.invoiceResourceId, null)

null, так как последний аргумент в методе Reduce устанавливает значение по умолчанию для acc.

0 голосов
/ 14 декабря 2018

Лично я не думаю, что с циклами что-то не так (когда они являются подходящим решением), но если бы вы делали это "способом функционального программирования", вы могли бы использовать Array.prototype.reduce:

outgoingInvoices.reduce((prev, curr) => {
    return prev || curr.invoiceResourceId;
}, null)
0 голосов
/ 14 декабря 2018

Вы должны использовать Array.find.Он вернет первый соответствующий объект или ноль.

var outgoingInvoices = [{
    invoiceRecipientName: "Test",
    invoiceResourceId: ""
  },
  {
    invoiceRecipientName: "Test",
    invoiceResourceId: "abc"
  },
  {
    invoiceRecipientName: "Test",
    invoiceResourceId: "20.pdf"
  }
];

var invoice = outgoingInvoices.find((inv) => !!inv.invoiceResourceId);
var output = !!invoice ? invoice.invoiceResourceId : invoice;

console.log(output)
0 голосов
/ 14 декабря 2018

Вы можете отобразить свой массив на тот, который имеет только invoiceResourceId, затем отфильтровать его, чтобы удалить null s, и если полученный массив пуст, просто верните null.

const resourceIds = outgoingInvoices.map(x => x.invoiceResourceId).filter(y => y);
const result = resourceIds.length ? resourceIds[0] : null;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...