首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用公共键合并属性数组

如何使用公共键合并属性数组
EN

Stack Overflow用户
提问于 2019-03-29 22:39:35
回答 3查看 57关注 0票数 0

如何使用下划线js实现下面的结果?

当前结果:

代码语言:javascript
复制
[
{Stats: "Number of virus", "Dec-2018": "1"},
{Stats: "Number of alerts", "Dec-2018": "2"},
{Stats: "Number of incidents", "Dec-2018": "1"},
{Stats: "Vulnerabilities", "Dec-2018": "6"},
{Stats: "Number of virus", "Nov-2018": "4"},
{Stats: "Number of alerts", "Nov-2018": "6"},
{Stats: "Number of incidents", "Nov-2018": "2"},
{Stats: "Vulnerabilities", "Nov-2018": "8"},
{Stats: "Number of virus", "Oct-2018": "2"},
{Stats: "Number of alerts", "Oct-2018": "2"},
{Stats: "Number of incidents", "Oct-2018": "5"},
{Stats: "Vulnerabilities", "Oct-2018": "2"},
]

预期结果:

代码语言:javascript
复制
[
{Stats: "Number of virus", Dec-2018: "1", "Nov-2018": "4", Oct-2018: "2"},
{Stats: "Number of alerts", Dec-2018: "2","Nov-2018": "6", Oct-2018: "2"},
{Stats: "Number of incidents", Dec-2018: "1", "Nov-2018": "2", Oct-2018: "5"},
{Stats: "Vulnerabilities", Dec-2018: "6", "Nov-2018": "8", Oct-2018: "2"}
]
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-03-29 23:08:46

您可以通过以下过程实现这一点。首先,使用indexBy()函数创建一个具有唯一Stats值的对象。之后,对于每个数据元素,扩展具有相同Stats值的数据元素。就这样!

代码语言:javascript
复制
var data = [
{Stats: "Number of virus", "Dec-2018": "1"},
{Stats: "Number of alerts", "Dec-2018": "2"},
{Stats: "Number of incidents", "Dec-2018": "1"},
{Stats: "Vulnerabilities", "Dec-2018": "6"},
{Stats: "Number of virus", "Nov-2018": "4"},
{Stats: "Number of alerts", "Nov-2018": "6"},
{Stats: "Number of incidents", "Nov-2018": "2"},
{Stats: "Vulnerabilities", "Nov-2018": "8"},
{Stats: "Number of virus", "Oct-2018": "2"},
{Stats: "Number of alerts", "Oct-2018": "2"},
{Stats: "Number of incidents", "Oct-2018": "5"},
{Stats: "Vulnerabilities", "Oct-2018": "2"},
]

var indexed = _.indexBy(data, 'Stats');

_.each(data, function(elem) {
  var object = indexed[elem.Stats];
  if (object) _.extend(object, elem);
});

var result = Object.values(indexed);

console.log(result);
代码语言:javascript
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

票数 0
EN

Stack Overflow用户

发布于 2019-03-29 23:15:53

您可以像这样使用reduceObject.values()

代码语言:javascript
复制
let input=[{Stats:"Number of virus","Dec-2018":"1"},{Stats:"Number of alerts","Dec-2018":"2"},{Stats:"Number of incidents","Dec-2018":"1"},{Stats:"Vulnerabilities","Dec-2018":"6"},{Stats:"Number of virus","Nov-2018":"4"},{Stats:"Number of alerts","Nov-2018":"6"},{Stats:"Number of incidents","Nov-2018":"2"},{Stats:"Vulnerabilities","Nov-2018":"8"},{Stats:"Number of virus","Oct-2018":"2"},{Stats:"Number of alerts","Oct-2018":"2"},{Stats:"Number of incidents","Oct-2018":"5"},{Stats:"Vulnerabilities","Oct-2018":"2"}];

let merged = input.reduce((acc, o) => {
  acc[o.Stats] = { ...acc[o.Stats], ...o }
  return acc;
}, {})

console.log(Object.values(merged))

票数 0
EN

Stack Overflow用户

发布于 2019-03-29 23:43:46

您可以使用findIndexreduce

代码语言:javascript
复制
const data = [
{Stats: "Number of virus", "Dec-2018": "1"},
{Stats: "Number of alerts", "Dec-2018": "2"},
{Stats: "Number of incidents", "Dec-2018": "1"},
{Stats: "Vulnerabilities", "Dec-2018": "6"},
{Stats: "Number of virus", "Nov-2018": "4"},
{Stats: "Number of alerts", "Nov-2018": "6"},
{Stats: "Number of incidents", "Nov-2018": "2"},
{Stats: "Vulnerabilities", "Nov-2018": "8"},
{Stats: "Number of virus", "Oct-2018": "2"},
{Stats: "Number of alerts", "Oct-2018": "2"},
{Stats: "Number of incidents", "Oct-2018": "5"},
{Stats: "Vulnerabilities", "Oct-2018": "2"},
]

const res = data.reduce((all, {
  Stats,
  ...rest
}) => {

  let found = all.findIndex(o => Stats === o.Stats);

  if (found > -1 ) {
    all[found] = { ...all[found],
      ...rest
    }
  } else {
    all.push({ ...{
        Stats,
        ...rest
      }
    })

  }
  return all
}, [])

console.log(res)

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

https://stackoverflow.com/questions/55419821

复制
相关文章

相似问题

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