javascript - 如何循环对象数组来求解简单的求和

标签 javascript jquery arrays json

我的对象数组如下所示:

[
  {
    "id": "0",
    "title": "Exercise",
    "main_object": {
      "title": "Exercise",
      "number1": {
        "1": "10",
        "2": "10",
        "3": "5",
        "4": "20",
      },
      "sumtype": {
        "1": "+",
        "2": "-",
        "3": "x",
        "4": ":",
      },
      "number2": {
        "1": "10",
        "2": "5",
        "3": "2",
        "4": "2",
      }
    }
  }
]

现在我将如何使用它在 javascript(和 jquery,如果它有更简单的方法来执行此操作)中创建一个数组,该数组具有这些简单求和的答案。因此数组中的第一个字符串应该是 10 + 10,即 20。第二个字符串应该是 10 - 5,即 5。

我使用 $.getJSON 来检索我的 JSON,并尝试了一个简单的 for 循环,如下所示:

var sumanswers = [];
var keyamount = Object.keys(exerSumType);
var keylength = keyamount.length;
for (i = 0; i < keylength; i++) {
    sumanswers[i] = exerNumber1[i] + exerSumType[i] + exerNumber2[i];
}

这只是给我一个字符串形式的总和(例如“10+10”),而我想要“20”。除此之外,由于某种原因,这并没有给我所有的总和,当我 console.log(sumanswers) 时它给了我这个:

0: NaN
1: "10+10"
2: "10-5"
3: "5x2"

因此,由于某种原因,我错过了最后的总和并得到 NaN 作为第一个总和。

任何帮助将不胜感激!

var exercises = [{
  "id": "0",
  "title": "Exercise",
  "main_object": {
    "title": "Exercise",
    "number1": {
      "1": "10",
      "2": "10",
      "3": "5",
      "4": "20",
    },
    "sumtype": {
      "1": "+",
      "2": "-",
      "3": "x",
      "4": ":",
    },
    "number2": {
      "1": "10",
      "2": "5",
      "3": "2",
      "4": "2",
    }
  }
}]

var sumanswers = [];
var keyamount = Object.keys(exerSumType);
var keylength = keyamount.length;
for (i = 0; i < keylength; i++) {
  sumanswers[i] = exerNumber1[i] + exerSumType[i] + exerNumber2[i];
  console.log(sumanswers[i] , exerNumber1[i] , exerSumType[i] , exerNumber2[i])
}

最佳答案

您可以使用数组来存储可枚举数据。数组是从零开始的,因此索引从零开始。

要使用给定的操作数计算某个值,您可以将所有操作数作为键的对象。

var data = [{ id: "0", title: "Exercise", main_object: { title: "Exercise", number1: { "1": "10", "2": "10", "3": "5", "4": "20" }, sumtype: { "1": "+", "2": "-", "3": "x", "4": ":" }, number2: { "1": "10", "2": "5", "3": "2", "4": "2" } } }],
    op = {
        '+': (a, b) => +a + +b,
        '-': (a, b) => a - b,
        'x': (a, b) => a * b,
        ':': (a, b) => a / b
    };

data.forEach(({ main_object }) => {
    main_object.answers = {};
    var { answers, number1, number2, sumtype } = main_object;
    Object
        .keys(main_object.number1)
        .forEach(k => answers[k] = op[sumtype[k]](number1[k], number2[k]))
});

console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 如何循环对象数组来求解简单的求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51172506/

相关文章:

javascript - 如何让我的导航栏在不同的屏幕尺寸上居中

javascript - 如何在查询时使用 Firebase Cloud Functions 中的 forEach?

javascript - undefined index 错误 - 如何设置折扣后的最后金额?

jquery - 在 html 表中搜索

java - 3 维数组中带有嵌套 for 循环的整数

javascript - 如何查找哪个 Javascript 触发或处理事件?

javascript - jQuery SerializeArray — 如何排除带有空 <opiton> 值的 <select>?

c - 在 C 中对二维字符串数组进行排序

c - 将二维数组传递给c中的函数时出错

javascript - 用于验证和格式化债券编号的正则表达式