最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - How to extract property of array in nested array - Stack Overflow

programmeradmin1浏览0评论

I have an array, which contains array of objects. I need to extract the property value "id" of items that have objects.

Example of array:

let myArray = [
    [ {id: "1"}, {id: "2"} ],
    [],
    [],
    [ {id: "3"} ]
]

How can I extract and create an array like this:

["1", "2", "3"]

I tried this:

tagIds = myArray.map(id =>{id})

I have an array, which contains array of objects. I need to extract the property value "id" of items that have objects.

Example of array:

let myArray = [
    [ {id: "1"}, {id: "2"} ],
    [],
    [],
    [ {id: "3"} ]
]

How can I extract and create an array like this:

["1", "2", "3"]

I tried this:

tagIds = myArray.map(id =>{id})
Share Improve this question edited Apr 16, 2018 at 15:09 Bentaye 9,7565 gold badges33 silver badges46 bronze badges asked Apr 16, 2018 at 15:04 AlexFF1AlexFF1 1,2834 gold badges25 silver badges47 bronze badges 2
  • 2 What have you tried so far? – Someone Commented Apr 16, 2018 at 15:04
  • I was wondering if multiple occurences of same id are there then either they have to be considered once or the no of its occurences? – vibhor1997a Commented Apr 16, 2018 at 15:15
Add a comment  | 

5 Answers 5

Reset to default 13

You can use reduce to flatten the array and use map to loop thru the array and return the id.

let myArray = [
  [{id: "1"}, {id: "2"}],
  [],
  [],
  [{id: "3"}],
];

let result = myArray.reduce((c, v) => c.concat(v), []).map(o => o.id);

console.log(result);

Another way with simple nested loops:

let myArray = [
    [ {id: "1"}, {id: "2"} ],
    [],
    [],
    [ {id: "3"} ]
]   

//----------------------------------

let newArray=[];    
for (let i=0;i<myArray.length;i++){
    for (let j=0;j<myArray[i].length;j++){
    newArray.push(myArray[i][j].id);
  }
}
console.log(newArray); //outputs ['1','2','3']

You can use .concat() to create array of single objects and then .map() to extract ids:

let myArray = [
  [{id: "1"}, {id: "2"}], [], [], [{id:"3"}]
];

let result = [].concat(...myArray).map(({ id }) => id);

console.log(result);

Docs:

  • Array.prototype.concat()
  • Array.prototype.map()
  • Spread Syntax

Here is my solution:

let a = myArray.flat(100) // you can put (3) or (10) in here, the higher the flatter the array

let b = a.map(

function(value){
return parseInt(value.id)
}
)

console.log(b)

You can also write a recursive function to make this work with any number of arrays, for example:

function extractIds(arr) {
    return arr.reduce((a, item) => {
        if (Array.isArray(item)) {
            return [
                ...a,
                ...extractIds(item)
            ];
        }

        return [
            ...a,
            item.id
        ];
    }, [])
}

extractIds([{id: 1}, [{id: 2}], {id: 3}, [{id: 4}, [{id: 5}, [{id: 6}]]]])

the return of extractIds will be [1, 2, 3, 4, 5, 6].

Notice that without the recursive part you would end up with something like this: [1, 2, [3, {id: 4}, [{id: 5}]]] (Not exactly like this, but just as an example).

发布评论

评论列表(0)

  1. 暂无评论