0
[[{ id: 26, type: "Source", name: "Email" }], [{ id: 27, type: "Source", name: "Id" }, { id: 29, type: "Divider", name: "+" }, { id: 30, type: "Source", name: "SupplierId" }], [{ id: 28, type: "Source", name: "CommunityId" }]

How do I convert this array of array of object above to an array of arrays like this where the "name" is singled out?

[["Email"],["Id","+", "SupplierId"],["CommunityId"]]

I have already tried to map it like this:

this.exportColumns = columns.flatMap(obj => obj.sourceColumn).map(obj => obj?.name);

but I get this outcome:

[ "Email", "Id", "+", "SupplierId", "CommunityId" ]
1
  • 1
    If you are not a master of maps/flatMap/mergeMap, you can try to first write it with plain old loops then replace them with RxJS operators afterwards Commented May 18, 2022 at 13:34

2 Answers 2

1

use 2nd map inside the 1st layer of arrays

data.map(item => item.map(i => i.name));
Sign up to request clarification or add additional context in comments.

1 Comment

what about if item is object not array.
0

here is my way to achieve output.

const d = [
  [{ id: 26, type: "Source", name: "Email" }], 
  [{ id: 27, type: "Source", name: "Id" }, { id: 29, type: "Divider", name: "+" }, { id: 30, type: "Source", name: "SupplierId" }],
  [{ id: 28, type: "Source", name: "CommunityId" }]
]

const newArr = d.reduce((prev, curr) => {
  if(Array.isArray(curr)) {
    prev.push(curr.map((p) => p.name))
  } else {
    prev.push(curr.name)
    // or use this if you want array
    // prev.push([curr.name])
  }
  return prev;
}, [])

console.log(newArr)

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.