下划线 - 从数组中获取相同的值对象总和
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));
);
【讨论】:
以上是关于下划线 - 从数组中获取相同的值对象总和的主要内容,如果未能解决你的问题,请参考以下文章