下划线 - 从数组中获取相同的值对象总和

Posted

技术标签:

【中文标题】下划线 - 从数组中获取相同的值对象总和【英文标题】:Underscore - get the same sume of the values objects from array 【发布时间】:2016-05-11 14:39:58 【问题描述】:
var array = [
     T: 2, G: 2, K: 2,        //<--- return this cause T+G+K = 6
     T: 2, G: 2, K: 3,
     T: 1, G: 3, K: 2         //<--- return this cause T+G+K = 6
];

我想从数组中返回相同的字段对象总和。如何做到这一点?

我想:

var array = [
     T: 2, G: 2, K: 2 ,        //<--- return this cause T+G+K = 6
     T: 2, G: 2, K: 3 ,
     T: 1, G: 3, K: 2          //<--- return this cause T+G+K = 6
];  

//getting uniq array
var uniqArray = _.uniq(array, function(value) 
    return value.T + value.G + value.K;


//uniqArray = [
//   T: 2, G: 2, K: 2 ,
//   T: 2, G: 2, K: 3 
//];

//getting the difference between uniq and normal array
var differenceArray = _.difference(array, uniqArray);

//differenceArray = [
//   T: 1, G: 3, K: 2 
//];

//and finally try to get the same objects in array like:
var theSame = [];
_.each(array, function(value) 
    if((value.T + value.G + value.K) === _.each(differenceArray, function(num) 
    return num.T + num.G + num.K; ) 
        theSame.push(value);
    
);

但我真的不太了解下划线,所以我认为我试图通过使用太多并使其太难来做某事。如何轻松获取这些对象?

谢谢

【问题讨论】:

首先我不明白你想要达到什么目的。让我们从您的 cmets 开始。您评论了一行:“ T: 2, G: 2, K: 2 , // 噢,抱歉弄错了。我之前编辑了这些值,忘记了编辑这些 cmets。我需要从数组中返回所有字段总和等于 6 的对象(第一个和第三个)。 【参考方案1】:

如果我正确理解你,这应该最终会起作用。

var array = [
   T: 2, G: 2, K: 2 ,
   T: 2, G: 2, K: 3 ,
   T: 1, G: 3, K: 2 
];

var uniqArray = _.uniq(array, function(value) 
  return value.T + value.G + value.K;
);

var differenceArray = _.difference(array, uniqArray);

var sums = _.map(differenceArray, function(item) 
  return item.T + item.G + item.K;
);

var result = _.filter(array, function(item) 
  var sum = item.T + item.G + item.K; 
  return _.contains(sums, sum);
);

更干净的版本:

var arraySum = function(item) 
  return item.T + item.G + item.K;
;

var notUniqueSums = _.chain(array)
  .difference(_.uniq(array, arraySum))
  .map(arraySum)
  .value();

var result = _.filter(array, function(item)  
  return _.contains(notUniqueSums, arraySum(item));
);

【讨论】:

以上是关于下划线 - 从数组中获取相同的值对象总和的主要内容,如果未能解决你的问题,请参考以下文章

js对象属性名驼峰式转下划线

使用下划线从数组中删除项

比较下划线js中的两个对象数组

mongoose 使用 lodash 或下划线 js 查询数组对象的数组

在 js 里面 对象属性名字 带减号 怎么取

从列表中获取总和为值的元素数组[重复]