这里有很多关于合并 javaScript 数组对象的帖子与我的问题相关,其中大多数都是合并 2 个数组,在我的情况下是不同的。
我有来自 API 的 JSON,我映射并过滤了它们,因为我只需要“标签”
这是我的代码:
JSON.map((key) => (key.tags))
.filter(function (element) {
return element !== undefined;
})
这是我的结果:
[
{
"web_devt": {
"item_id": "858850847",
"tag": "web_devt"
}
},
{
"web_devt": {
"item_id": "1004644524",
"tag": "web_devt"
}
},
{
"pdo": {
"item_id": "1056300113",
"tag": "pdo"
},
"php": {
"item_id": "1056300113",
"tag": "php"
},
"web_devt": {
"item_id": "1056300113",
"tag": "web_devt"
}
},
{
"parallax scrolling": {
"item_id": "1087678088",
"tag": "parallax scrolling"
}
},
{
"react": {
"item_id": "2435593852",
"tag": "react"
}
},
{
"javascript": {
"item_id": "2435595088",
"tag": "javascript"
}
},
{
"react": {
"item_id": "2465629468",
"tag": "react"
}
}
]
我想像这样合并它们:
[
{
"web_devt": [
item_id: "765558416",
item_id: "765558416",
item_id: "765558416",
...]
},
{
"react": [
item_id: "765558416",
item_id: "765558416",
item_id: "765558416",
...]
},
{
"JavaScipt": [
item_id: "765558416",
item_id: "765558416",
item_id: "765558416",
...]
}
]
等等... 基本上所有相同的标签都会合并 你如何在 reduce 或任何解决方案中做到这一点,而不是 loadash 或任何第三方?
最佳答案
您想要的输出语法无效。您不能拥有带键的数组,也不能拥有具有多个同名键的对象。
但是,如果您想要一个 id 数组,您可以使用 reduce 并对数据进行分组,对于单个项目使用 Object.entries
获取对象中的键和值。
var data = [
{
"web_devt": {
"item_id": "858850847",
"tag": "web_devt"
}
},
{
"web_devt": {
"item_id": "1004644524",
"tag": "web_devt"
}
},
{
"pdo": {
"item_id": "1056300113",
"tag": "pdo"
},
"php": {
"item_id": "1056300113",
"tag": "php"
},
"web_devt": {
"item_id": "1056300113",
"tag": "web_devt"
}
},
{
"parallax scrolling": {
"item_id": "1087678088",
"tag": "parallax scrolling"
}
},
{
"react": {
"item_id": "2435593852",
"tag": "react"
}
},
{
"javascript": {
"item_id": "2435595088",
"tag": "javascript"
}
},
{
"react": {
"item_id": "2465629468",
"tag": "react"
}
}
]
const res = data.reduce((acc, item) => {
Object.entries(item).forEach((attr) => {
const [key,value] = attr;
if(value.tag !== undefined) {
if (acc[key]){
acc[key].push(value.item_id);
}
else {
acc[key] = [value.item_id];
}
}
});
return acc;
}, {})
console.log(res);
关于javascript - 如何使用 reduce 合并 JavaScript 对象数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54898539/