如何根据其他参数使用对象列表中的参数? (JavaScript)的

时间:2016-08-11 11:24:59

标签: javascript arrays multidimensional-array

我不确定我是否可以正确解释这个问题,但现在就说了。我们说我有这个:

List = {
    0: {
        payment: 1,
        value: 10
    },
    1: {
        payment: 2,
        value: 15
    },
    2: {
        payment: 1,
        value: 12
    },
    3: {
        payment: 2,
        value: 13
    }
}

如何分别总结2笔付款的价值?又名sumforpayment1= 10 +12sumforpayment2= 15 + 13

4 个答案:

答案 0 :(得分:4)

您可以使用Object.keys()reduce()返回包含每笔付款金额的对象。



var data = {
  0: {
    payment: 1,
    value: 10
  },
  1: {
    payment: 2,
    value: 15
  },
  2: {
    payment: 1,
    value: 12
  },
  3: {
    payment: 2,
    value: 13
  }
}

var result = Object.keys(data).reduce(function(r, e) {
  var key = 'sumforpayment' + data[e].payment;
  r[key] = (r[key] || 0) + data[e].value;
  return r;
}, {})

console.log(result)




答案 1 :(得分:1)

我认为你需要一组对象。在这种情况下,对象是不必要的。



List = [
{
        payment: 1,
        value: 10
},
{
        payment: 2,
        value: 15
},
{
        payment: 1,
        value: 12
},
{
        payment: 2,
        value: 13
}
];

var List2 = {};

List.map(function(o) {
 if(!List2['sumforpayment' + o.payment]) {
  List2['sumforpayment' + o.payment] = o.value;
 }
 else {
 List2['sumforpayment' + o.payment] += o.value;
 }
});

console.log(List2);
</script>
&#13;
&#13;
&#13;

答案 2 :(得分:1)

这些天我喜欢这个符号迭代器,当谈到对象时。

var list = {
    0: {
        payment: 1,
        value: 10
    },
    1: {
        payment: 2,
        value: 15
    },
    2: {
        payment: 1,
        value: 12
    },
    3: {
        payment: 2,
        value: 13
    }
},
     res = [];
list[Symbol.iterator] = function*(){
                          var oks = Object.keys(this),
                          payment = {1:0,2:0};
                          for (var key of oks) this[key].payment === 1 ? payment["1"] += this[key].value
                                                                       : payment["2"] += this[key].value;
                          yield payment;
                        };
res = [...list];
console.log(res);

答案 3 :(得分:0)

首先,请修改您的JavaScript对象,因为它没有正确格式化。

属性应以逗号分隔。

您可以创建一个实用程序函数,该函数会迭代您的对象,搜索付款标识值并计算总金额。

它是如何运作的:

  • 使用Object.keys()迭代您的对象属性。
  • 如果属性payment的值通过“selector”(paymentNumber
  • 汇总其值将返回总结果值。

var list = {
  0: {
    payment: 1,
    value: 10
  },
  1: {
    payment: 2,
    value: 15
  },
  2: {
    payment: 1,
    value: 12
  },
  3: {
    payment: 2,
    value: 13
  }
}

var calculatePaymentSum = function(paymentNumber, data) {
  var result = 0;
  Object.keys(data).forEach(function(key) {
    if (data[key].payment === paymentNumber) {
      result += data[key].value;
    }
  }, this);
  return result;
};

console.log('sum of payment 1 = ', calculatePaymentSum(1, list));
console.log('sum of payment 2 = ', calculatePaymentSum(2, list));

相关问题