首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >hasOwnProperty在对象数组中不起作用,组合对象

hasOwnProperty在对象数组中不起作用,组合对象
EN

Stack Overflow用户
提问于 2018-09-14 07:17:40
回答 1查看 1.1K关注 0票数 0

我正在尝试构建一个对象数组,但将相似的属性组合在一起,并将它们的值相加。那么多的x数组需要转化为对象的y数组。它必须是一个对象数组,而不仅仅是一个数组

代码语言:javascript
复制
 var x = [
    {"2018-09-13": "100"},
    {"2018-09-14": "50"},
    {"2018-09-14": "50"},
    {"2018-09-15": "100"}
 ];

期望的结果

代码语言:javascript
复制
 var y = [
    {"2018-09-13": "100"},
    {"2018-09-14": "50,50"},
    {"2018-09-15": "100"}
 ];

下面是我正在运行的将它们加在一起的函数,但不起作用。我认为这与导致hasOwnProperty方法问题的数组索引有关

代码语言:javascript
复制
var z = [];

x.forEach((item) => {
    for(var date in item) {
        if(z.hasOwnProperty(date)) {
            z[date] +=  "," + item[date];
           } else {
            z.push({[date]: item[date]});
           }
         }
    })


console.log(z)
EN

回答 1

Stack Overflow用户

发布于 2018-09-14 07:51:21

你可以通过减少数组来分组,只有在没有找到键的情况下,才能将值推入累加器,如果找到,只需更新值……

代码语言:javascript
复制
var array = [{
    "2018-09-13": "100"
  },
  {
    "2018-09-14": "50"
  },
  {
    "2018-09-14": "50"
  },
  {
    "2018-09-15": "100"
  }
];

var grouped = array.reduce((acc, obj) => {
  var old = null;
  let key = Object.keys(obj)[0]
  old = acc.find(item => key == Object.keys(item)[0]);
  if (!old) {
    acc.push(obj);
  } else {
    old[key] += `, ${obj[key]}`;
  }
  
  return acc;
}, []);

console.log(grouped);

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

https://stackoverflow.com/questions/52322967

复制
相关文章

相似问题

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