首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将来自数组的多个JSON对象合并在一起

将来自数组的多个JSON对象合并在一起
EN

Stack Overflow用户
提问于 2020-11-06 02:18:04
回答 2查看 124关注 0票数 0

我有一个JSON对象数组,我希望将具有相同文本的对象合并在一起,同时在所有相同的实例中找到相关性的平均值和计数的总和。

代码语言:javascript
复制
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
            },

我尝试了the solution posted here,但是,我得到了这样的输出:

代码语言:javascript
复制
{
    text: 'service businesses',
    count: '[object Object][object Object]'
  }

我希望的输出是这样的:

代码语言:javascript
复制
            {
                "text": "service businesses",
                "relevance": 0.516497667,
                "count": 106
            },

            {
                "text": "restaurants",
                "relevance": 0.612221,
                "count": 20
            },
            {
                "text": "hotels",
                "relevance": 0.594905,
                "count": 1
            },

任何帮助都是非常感谢的!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-06 02:26:51

使用Array.prototype.reduce,您可以按文本对元素进行分组,并且基于该组数据,可以获得如下输出。

代码语言:javascript
复制
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);

票数 0
EN

Stack Overflow用户

发布于 2020-11-06 03:01:37

我在两个for循环中运行它,然后在第二个循环上计算相关性。

我只是跟踪了一个普通对象中的值。

代码语言:javascript
复制
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))

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64707970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档