如何提取嵌套数组中的数组属性

5

我可以为您进行翻译。以下是需要翻译的内容:

我有一个数组,其中包含对象数组。我需要提取具有对象的项目的属性值"id"。

数组示例:

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

如何提取和创建像这样的数组:
["1", "2", "3"]

我尝试了这个:


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

2
你目前尝试了什么? - Lewis
我在想,如果有多个相同的ID出现,那么它们是要被考虑一次还是考虑它们的出现次数? - vibhor1997a
5个回答

13
您可以使用reduce来展开数组,然后使用map循环遍历该数组并返回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);


2
简单嵌套循环的另一种方法如下:
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']

2
您可以使用.concat()创建单个对象的数组,然后使用.map()提取id:

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

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

console.log(result);

文档:


1
这是我的解决方案:
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)

0
你也可以编写一个递归函数,使其能够处理任意数量的数组,例如:
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}]]]])

extractIds 的返回值将是 [1, 2, 3, 4, 5, 6]

请注意,如果没有递归部分,你最终会得到类似于这样的结果:[1, 2, [3, {id: 4}, [{id: 5}]]](不完全相同,只是举个例子)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接