2

let newdata = await tripModel.find( { tripId: ID }, {salesOrder:1, no: "$deliveryDetails.invoiceNo", _id: 0 } );

let nullInvoices = [];

console.log("vvvvvvv", newdata[0].salesOrder);
for (let i = 0; i < newdata[0].no.length; i++) {
  if (newdata[0].no[i] === null)
    nullInvoices.push({
      SO: newdata[0].salesOrder[i],
      invoice: newdata[0].no[i],
    });
}`

//error: vvvvvvv { salesOrder: [ 623d917d4c9f21730ace6256, 623da8bbeae48b2f34372a95, 623da8bbeae48b2f34372a92, 623d98964c9f21730ace642c ], no: [ null, '0900009293', '0900009294', null ] } reason TypeError: Cannot read properties of undefined (reading 'length')

I need to access "no", but it is throwing as undefined.

1
  • I think you need this : newdata[0].salesOrder.no.length Commented Mar 30, 2022 at 7:19

2 Answers 2

1

Since your

console.log("vvvvvvv", newdata[0].salesOrder); statement returns

{
    salesOrder: [ 623d917d4c9f21730ace6256, 623da8bbeae48b2f34372a95, 623da8bbeae48b2f34372a92, 623d98964c9f21730ace642c ],
    no: [ null, '0900009293', '0900009294', null ],
}

your iteration must be like as below

let nullInvoices = [];

console.log("vvvvvvv", newdata[0].salesOrder);
for (let i = 0; i < newdata[0].salesOrder.no.length; i++) {
  if (newdata[0].salesOrder.no[i] === null)
    nullInvoices.push({
      SO: newdata[0].salesOrder.salesOrder[i],
      invoice: newdata[0].salesOrder.no[i],
    });
}

Sample Implementation

const newdata = [{}];

newdata[0].salesOrder = {
  salesOrder: ['623d917d4c9f21730ace6256', '623da8bbeae48b2f34372a95', '623da8bbeae48b2f34372a92', '623d98964c9f21730ace642c'],
  no: [null, '0900009293', '0900009294', null],
}

let nullInvoices = [];

for (let i = 0; i < newdata[0].salesOrder.no.length; i++) {
  if (newdata[0].salesOrder.no[i] === null)
    nullInvoices.push({
      SO: newdata[0].salesOrder.salesOrder[i],
      invoice: newdata[0].salesOrder.no[i],
    });
}

console.log(nullInvoices);

Sign up to request clarification or add additional context in comments.

Comments

1

Actually, you can make an invoices object first, and then filter it by any condition:

const data = {salesOrder: [ '623d917d4c9f21730ace6256', '623da8bbeae48b2f34372a95', '623da8bbeae48b2f34372a92', '623d98964c9f21730ace642c'],no: [ null, '0900009293', '0900009294', null ]};

const invoices = data.salesOrder
  .map((SO, index) => ({ SO, invoice: data.no[index] }));

const nullInvoices = invoices
  .filter(({ invoice }) => invoice === null);
  
console.log(nullInvoices);
.as-console-wrapper{min-height: 100%!important; top: 0}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.