【问题标题】:How do I get all objects in a nested array after performing a calculation in JavaScript?在 JavaScript 中执行计算后,如何获取嵌套数组中的所有对象?
【发布时间】:2019-03-27 09:24:26
【问题描述】:

我有两个不同的数组对象,并且有一个使用这些对象并执行计算的函数。我想知道如何在 JavaScript 中执行计算并获取所有嵌套数组对象,如下所示(预期输出)。

var obj = [
 {
   name: "insta",
   fee: "2",
   rate: "2.00"
 },
 {
   name: "transfer",
   fee: "1",
   rate: "3.00"
 }
],
var query = 
 {
   country: "SG",
   sourceamount: "4,000"
 }
function config(objectdata, querydata){
  let send_amount = querydata.sourceamount.replace(/,/g,"");
  let fee = objectdata.fee;
  let rate = objectdata.rate;
  let amount_to_convert = send_amount - fee;
  let receive_amount = amount_to_convert * rate;
  let result_data = {send: send_amount, fees: fee, ratevalue: rate, amountvalue :amount_to_convert, receive: receive_amount}
  return  result_data;
}

result = config(obj, query);
Expected Output:
result  = [
 {
   name: "insta",
   fees: "2",
   ratevalue: "2.00",
   amountvalue: "3998",
   receive: "7976"
   country: "SG",
   sourceamount: "4,000"
 },
{
   name: "transfer",
   fees: "1",
   ratevalue: "3.00",
   amountvalue: "3997",
   receive: "11,991"
   country: "SG",
   sourceamount: "4,000"
 }  
]

【问题讨论】:

  • 你在哪里迭代的?

标签: javascript jquery arrays object


【解决方案1】:

您需要映射obj 数组并构造您的输出。

注意:如果要执行算术运算,则需要解析 fee-rate-sourceamount 值。

var obj = [{
  name: "insta",
  fee: "2",
  rate: "2.00"
}, {
  name: "transfer",
  fee: "1",
  rate: "3.00"
}];

var query = {
  country: "SG",
  sourceamount: "4,000"
};

function config(objectdata, querydata) {

  let result_data = objectdata.map(function(obj) {

    let send_amount = parseInt(querydata.sourceamount.replace(/,/g, ""));
    let fee         = parseInt(obj.fee);
    let rate        = parseInt(obj.rate);
    
    let amount_to_convert = send_amount - fee;
    let receive_amount = amount_to_convert * rate;

    return {
      name: obj.name,
      fees: fee,
      ratevalue: rate,
      amountvalue: amount_to_convert,
      receive: receive_amount,
      country: querydata.country,
      sourceamount: send_amount,
    }
  });

  return result_data;
}

console.log(config(obj, query));

【讨论】:

    【解决方案2】:

    您可以使用 .map 循环您的数组并构造您的所有对象。

    var obj = [{
          name: "insta",
          fee: "2",
          rate: "2.00"
        },
        {
          name: "transfer",
          fee: "1",
          rate: "3.00"
        }
      ];
      var query = {
        country: "SG",
        sourceamount: "4,000"
      }
    
    function config(objectdata, querydata) {
      return objectdata.map(function(obj) {
        let send_amount = +querydata.sourceamount.replace(/,/g, "");
        let fee = +obj.fee;
        let rate = +obj.rate;
        let amount_to_convert = send_amount - fee;
        let receive_amount = amount_to_convert * rate;
        return {
          name: obj.name,
          fees: fee,
          ratevalue: rate,
          amountvalue: amount_to_convert,
          receive: receive_amount,
          ...querydata
        }
      });
    
    }
    
    result = config(obj, query);
    
    console.log(result)

    【讨论】:

    • 仍然与预期的输出不匹配。
    • send 属性的来源。 sourceamount 是预期的输出,4000 应该是 "4,000"
    • @MaheerAli 来自 OP 示例代码。感谢"4,000"
    • 我打错了sourceamount,旧代码中有send 属性。但现在它很好,所以 +1
    【解决方案3】:

    const array = [{
     name: "insta",
     fee: "2",
     rate: "2.00"
    }, {
     name: "transfer",
     fee: "1",
     rate: "3.00"
    }]
    const query = { country: "SG", sourceamount: "4,000" }
    
    function config (data, querydata) {
      const send_amount = querydata.sourceamount.replace(/,/g,"")
      
      return data.map(({ fee, rate, ...rest }) => ({ 
        fees: fee, 
        ratevalue: rate, 
        amountvalue: +send_amount - +fee, 
        receive: (+send_amount - +fee) * +rate,
        ...rest,
        ...querydata
      }))
    }
    
    result = config(array, query)
    
    console.log(result)

    【讨论】:

      猜你喜欢
      • 2017-06-18
      • 1970-01-01
      • 1970-01-01
      • 2020-04-13
      • 2019-09-26
      • 2016-07-23
      • 2021-09-21
      • 1970-01-01
      • 2020-07-20
      相关资源
      最近更新 更多