【问题标题】: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 的对象(第一个和第三个)。

标签: arrays object underscore.js each


【解决方案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));
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-10
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    相关资源
    最近更新 更多