0

I have the following data as a nested array please see the below fiddle https://jsfiddle.net/athulmathew/z3s1w0mu/ I want to get the output from the array-like below

var item {caller_number_raw : data from the array,company_id:data from the array}

I tried to sort it like this

for (i in data.data.hits) {
  for (j in data.data.hits[i]._source) {   
    //str += data.data.hits[i]._source[j] + "<br/>";
    var Item ={CallerID:data.data.hits[i]._source[j].caller_number}       
    console.log(Item) 
  }
}

but returns an empty object "{}" I am not that familiar with nested arrays can anybody help me what I am doing wrong here

2 Answers 2

1

_source is just an Object, you don't have to iterate over its property in order to get a specific property, you can replace the second loop with just var Item ={CallerID:data.data.hits[i]._source.caller_number} .

Also, since data.data.hits is an array, it is more appropriate to use for...of or a normal for loop instead of for...in.

Here is an example:

for (const hit of data.data.hits) {
    const item = { CallerID: hit._source.caller_number };
    console.log(item);
}

Event though the example above will work, it will not produce the required output the you've mentioned, to do that, you can use something like this:

for (const hit of data.data.hits) {
    const item = { caller_number_raw : hit.caller_number_raw, company_id: hit.company_id }
    console.log(item);
}

If you want to store all the newly created objects into an array, you can do something like this:

const output = [];
for (const hit of data.data.hits) {
    output.push({ caller_number_raw : hit.caller_number_raw, company_id: hit.company_id });
}
console.log(output);

This is even easier using a functional approach:

const output = data.data.hits.map(({ caller_number_raw, company_id }) => ({ caller_number_raw, company_id }));
Sign up to request clarification or add additional context in comments.

Comments

0

here you don't need the second for in loop because _source is an object.

for (let i in data.data.hits) {
    if(data.data.hits[i]._source.caller_number){
      var Item = {
        CallerID: data.data.hits[i]._source.caller_number
      }
       console.log(Item)
    }
   
}

Here is the jsFiddle link of the solution.

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.