我有一个包含对象数组的数组。我需要提取具有对象的项的属性值“id”。
数组示例:
let myArray = [
[ {id: "1"}, {id: "2"} ],
[],
[],
[ {id: "3"} ]
]
如何提取和创建这样的数组:
["1", "2", "3"]
我试过了:
tagIds = myArray.map(id =>{id})
答案 0 :(得分:7)
您可以使用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);
答案 1 :(得分:2)
您可以使用.concat()
创建单个对象数组,然后使用.map()
提取ID:
let myArray = [
[{id: "1"}, {id: "2"}], [], [], [{id:"3"}]
];
let result = [].concat(...myArray).map(({ id }) => id);
console.log(result);

<强>文档:强>
答案 2 :(得分:1)
使用简单嵌套循环的另一种方法:
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']
答案 3 :(得分: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)
答案 4 :(得分:0)
您还可以编写递归函数,使其适用于任意数量的数组,例如:
extractIds
[1, 2, 3, 4, 5, 6]
的回复将为[1, 2, [3, {id: 4}, [{id: 5}]]]
。
请注意,如果没有递归部分,您最终会得到类似这样的内容:self.pos = pygame.mouse.get_pos()
(不完全是这样,但仅作为示例)。