将数组中的多个 JSON 个对象合并在一起
Merging multiple JSON objects from an array together
我有一个 JSON 对象数组,我想将具有相同文本的对象合并在一起,同时找到所有相同实例的相关性平均值和计数总和。
var keywords = [
{
"text": "service businesses",
"relevance": 0.626303,
"count": 1
},
{
"text": "service businesses",
"relevance": 0.87319,
"count": 5
},
{
"text": "service businesses",
"relevance": 0.05,
"count": 100
},
{
"text": "restaurants",
"relevance": 0.614567,
"count": 16
},
{
"text": "restaurants",
"relevance": 0.609875,
"count": 4
},
{
"text": "hotels",
"relevance": 0.594905,
"count": 1
},
我试过 但是,我得到的输出是这样的:
{
text: 'service businesses',
count: '[object Object][object Object]'
}
我希望的输出如下所示:
{
"text": "service businesses",
"relevance": 0.516497667,
"count": 106
},
{
"text": "restaurants",
"relevance": 0.612221,
"count": 20
},
{
"text": "hotels",
"relevance": 0.594905,
"count": 1
},
非常感谢任何帮助!
使用Array.prototype.reduce
,您可以按文本对元素进行分组,并根据该组数据获得如下输出。
var keywords = [{
"text": "service businesses",
"relevance": 0.626303,
"count": 1
},
{
"text": "service businesses",
"relevance": 0.87319,
"count": 5
},
{
"text": "service businesses",
"relevance": 0.05,
"count": 100
},
{
"text": "restaurants",
"relevance": 0.614567,
"count": 16
},
{
"text": "restaurants",
"relevance": 0.609875,
"count": 4
},
{
"text": "hotels",
"relevance": 0.594905,
"count": 1
}
];
const groupBy = keywords.reduce((acc, cur) => {
acc[cur.text] ? acc[cur.text] = {
...acc[cur.text],
count: acc[cur.text].count + cur.count,
relevance: [...acc[cur.text].relevance, cur.relevance]
} : acc[cur.text] = {
...cur,
relevance: [cur.relevance]
};
return acc;
}, {});
const output = Object.values(groupBy).map((item) => ({
...item,
relevance: item.relevance.reduce((acc, cur) => acc + cur, 0) / item.relevance.length
}));
console.log(output);
我运行它在两个for循环中,然后在第二个循环中计算相关性。
我只是跟踪普通对象中的值。
var keywords = [
{
"text": "service businesses",
"relevance": 0.626303,
"count": 1
},
{
"text": "service businesses",
"relevance": 0.87319,
"count": 5
},
{
"text": "service businesses",
"relevance": 0.05,
"count": 100
},
{
"text": "restaurants",
"relevance": 0.614567,
"count": 16
},
{
"text": "restaurants",
"relevance": 0.609875,
"count": 4
},
{
"text": "hotels",
"relevance": 0.594905,
"count": 1
}
]
const objectMerge = (arr) => {
let map = {};
for(let idx in arr){
const { text, relevance, count } = arr[idx];
if(!map[text]){
map[text] = {
count: 0,
relevance: []
}
}
map[text].count += count
map[text].relevance.push(relevance)
}
for(const key in map){
let lenOfRelevance = map[key].relevance.length
map[key].relevance = map[key].relevance.reduce((a,b) => a+b) / lenOfRelevance
}
return map
}
console.log(objectMerge(keywords))
我有一个 JSON 对象数组,我想将具有相同文本的对象合并在一起,同时找到所有相同实例的相关性平均值和计数总和。
var keywords = [
{
"text": "service businesses",
"relevance": 0.626303,
"count": 1
},
{
"text": "service businesses",
"relevance": 0.87319,
"count": 5
},
{
"text": "service businesses",
"relevance": 0.05,
"count": 100
},
{
"text": "restaurants",
"relevance": 0.614567,
"count": 16
},
{
"text": "restaurants",
"relevance": 0.609875,
"count": 4
},
{
"text": "hotels",
"relevance": 0.594905,
"count": 1
},
我试过
{
text: 'service businesses',
count: '[object Object][object Object]'
}
我希望的输出如下所示:
{
"text": "service businesses",
"relevance": 0.516497667,
"count": 106
},
{
"text": "restaurants",
"relevance": 0.612221,
"count": 20
},
{
"text": "hotels",
"relevance": 0.594905,
"count": 1
},
非常感谢任何帮助!
使用Array.prototype.reduce
,您可以按文本对元素进行分组,并根据该组数据获得如下输出。
var keywords = [{
"text": "service businesses",
"relevance": 0.626303,
"count": 1
},
{
"text": "service businesses",
"relevance": 0.87319,
"count": 5
},
{
"text": "service businesses",
"relevance": 0.05,
"count": 100
},
{
"text": "restaurants",
"relevance": 0.614567,
"count": 16
},
{
"text": "restaurants",
"relevance": 0.609875,
"count": 4
},
{
"text": "hotels",
"relevance": 0.594905,
"count": 1
}
];
const groupBy = keywords.reduce((acc, cur) => {
acc[cur.text] ? acc[cur.text] = {
...acc[cur.text],
count: acc[cur.text].count + cur.count,
relevance: [...acc[cur.text].relevance, cur.relevance]
} : acc[cur.text] = {
...cur,
relevance: [cur.relevance]
};
return acc;
}, {});
const output = Object.values(groupBy).map((item) => ({
...item,
relevance: item.relevance.reduce((acc, cur) => acc + cur, 0) / item.relevance.length
}));
console.log(output);
我运行它在两个for循环中,然后在第二个循环中计算相关性。
我只是跟踪普通对象中的值。
var keywords = [
{
"text": "service businesses",
"relevance": 0.626303,
"count": 1
},
{
"text": "service businesses",
"relevance": 0.87319,
"count": 5
},
{
"text": "service businesses",
"relevance": 0.05,
"count": 100
},
{
"text": "restaurants",
"relevance": 0.614567,
"count": 16
},
{
"text": "restaurants",
"relevance": 0.609875,
"count": 4
},
{
"text": "hotels",
"relevance": 0.594905,
"count": 1
}
]
const objectMerge = (arr) => {
let map = {};
for(let idx in arr){
const { text, relevance, count } = arr[idx];
if(!map[text]){
map[text] = {
count: 0,
relevance: []
}
}
map[text].count += count
map[text].relevance.push(relevance)
}
for(const key in map){
let lenOfRelevance = map[key].relevance.length
map[key].relevance = map[key].relevance.reduce((a,b) => a+b) / lenOfRelevance
}
return map
}
console.log(objectMerge(keywords))