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

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.