如何减少对象数组并避免覆盖字符串属性值和仅求和整数值?

弗拉西耶

我有一个按不同类别分组的数组,每个类别都嵌套了更多具有不同值(数字和字符串)的对象,这些对象必须减少(字符串除外)。Reduce可以很好地处理将它们相加的数字值,但它会覆盖仅保留最后一个值的字符串值。

我试图按类别减少对象/词典,并用每个类别的单位总和填充表格,但是如果子类别和名称不同,则不要对它们进行求和。

这是一个演示:

var data = {
  'Category xxxx': [
    {
      units: 1234,
      subcategory: 'wolves',
      name: 'Starks'
    },
    {
      units: 1345354,
      subcategory: 'wolves',
      name: 'Starks'
    },
   {
      units: 666,
      subcategory: 'dragons',
      name: 'Targaryens'
    }
  ], 
  'Category yyyy': [
    {
      units: 7783,
      subcategory: 'lions',
      name: 'Lanisters'
    },
    {
      units: 1267878,
      subcategory: 'spires',
      name: 'Martells'
    }
  ]
}

var test = _.map(data, function (value, key) {
  var returnedData = {
    Category: key,
    units: _(value).reduce(function (memo, metrics) {
      return memo + metrics.units;
    }, 0),
    subcategory: _(value).reduce(function (memo, metrics) {
      return metrics.subcategory;
    }, 0),
    name: _(value).reduce(function (memo, metrics) {
      return metrics.name;
    }, 0),
  };
  return returnedData;
});

console.log(test)
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

单位(整数)加起来很好,但是字符串被最后一个迭代的string属性覆盖。

我想获得类似这样的东西,如果字符串不同,则不将整数相加。

returnedData = {
  'Category xxxx': [
    {
      units: 1346588,
      chivalry: 'wolves',
      name: 'Starks'
    },
    {
      units: 666,
      subcategory: 'dragons',
      name: 'Targaryens'
    }
  ], 
  'Category yyyy': [
    {
      clicks: 7783,
      subcategory: 'lions',
      name: 'Lanisters'
    },
    {
      clicks: 1267878,
      subcategory: 'spires',
      name: 'Martells'
    }
  ]
}

最好的方法是什么?

妮娜·斯科茨(Nina Scholz)

最后,该建议使用一个对象作为对该result对象各项的引用

如果没有result可用的对象,则它将创建一个具有所需类别的新对象。对于子类别,它将生成一个元素,该元素将被推送到结果数组。

该计数将hash作为的元素进行维护result

var data = { 'Category xxxx': [{ clicks: 1234, subcategory: 'dogs', name: 'jhon doe' }, { clicks: 1345354, subcategory: 'dogs', name: 'jhon doe' }], 'Category yyyy': [{ clicks: 7783, subcategory: 'frogs', name: 'lanisters' }, { clicks: 1267878, subcategory: 'rats', name: 'perry' }] },
    result = {};

Object.keys(data).forEach(function (k) {
    var hash = Object.create(null);
    if (!result[k]) {
        result[k] = [];
    }
    data[k].forEach(function (a) {
        if (!hash[a.subcategory]) {
            hash[a.subcategory] = { clicks: 0, subcategory: a.subcategory, name: a.name };
            result[k].push(hash[a.subcategory]);
        }
        hash[a.subcategory].clicks += a.clicks;
    });
});

console.log(result);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何对字符串和整数值,具有字母顺序和“反向”-字母顺序的多个属性的数组进行排序

使用整数值的numpy数组处理字符串值

从Dataframe对象-python过滤字符串和整数值

如何在Python中将2D数组的字符串值转换为整数值?

无法根据字符串值减少对象数组

在树对象中覆盖和分组字符串数组

如何求和数组中的字符串值

如何避免使用Try Catch(C ++)以整数值输入字符串

如何在vb.net的列表框中添加字符串值和整数值?

在数组值中组合整数和字符串

混合整数和字符串值的排序数组

通过字符串数组和字符串数组的属性过滤对象数组

如何从元组中排除字符串以仅显示整数值?

如何从数组中输出字符串、整数和双精度值?

如何使用包含字符串和整数的元素将值分配给多维数组

javascript-如何按3种不同的属性类型对对象数组进行排序?(字符串,整数,布尔值)

如何对实例字符串值求和

如何对字符串中的值求和

如何对整数和字符串数组进行排序?

如何遍历包含数组、对象和字符串的对象

Pandas - 使用字典和求和值将列表中的字符串转换为整数

使用数组时,如何使textbox.text中的字符串给出整数值?

将字符串的关联数组转换为整数的平面数组(仅值)

通过字符串属性值查找对象数组中最长的字符串

如何使用JavaScript和NodeJS避免用逗号分隔的字符串中的数组中的空对象?

当 A 和 O 都是对象的属性时,使用字符串数组 A 的值作为对象 O 中的键

如何使用正则表达式拆分字符串值并返回数组和对象?

如何使用javascript(jquery)将整数值添加到返回字符串的值?

读取CSV文件时如何将字符串值转换为整数值?