首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在对象数组上循环求解简单和

如何在对象数组上循环求解简单和
EN

Stack Overflow用户
提问于 2018-07-04 11:23:34
回答 4查看 79关注 0票数 2

我的对象数组如下所示:

代码语言:javascript
运行
复制
[
  {
    "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循环,如下所示:

代码语言:javascript
运行
复制
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)时给出的:

代码语言:javascript
运行
复制
0: NaN
1: "10+10"
2: "10-5"
3: "5x2"

因此,由于某种原因,我错过了我的最后一次和,并将NaN作为第一次和。

任何帮助都将不胜感激!

代码语言:javascript
运行
复制
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])
}

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-07-04 11:30:17

可以使用数组进行可枚举数据。数组是基于零的,所以索引从零开始。

为了用给定的操作数计算某个值,可以将一个带有所有操作数的对象作为键。

代码语言:javascript
运行
复制
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);
代码语言:javascript
运行
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 4
EN

Stack Overflow用户

发布于 2018-07-04 11:31:52

以下是起诉ES6Object.keysArray.reduceSpread operatorDynamic key name的工作片段。

代码语言:javascript
运行
复制
const obj = {
  number1: {
    1: '10',
    2: '10',
    3: '5',
    4: '20',
  },
  sumtype: {
    1: '+',
    2: '-',
    3: 'x',
    4: ':',
  },
  number2: {
    1: '10',
    2: '5',
    3: '2',
    4: '2',
  },
};

function makeOp(n1, op, n2) {
  return ({
    '+': () => n1 + n2,
    '-': () => n1 - n2,
    'x': () => n1 * n2,
    ':': () => n1 / n2,
  }[op])();
}

const res = Object.keys(obj.number1).reduce((tmp, x) => ({
  ...tmp,

  [x]: makeOp(Number(obj.number1[x]), obj.sumtype[x], Number(obj.number2[x])),
}), {});

console.log(res);

票数 0
EN

Stack Overflow用户

发布于 2018-07-04 11:51:58

代码语言:javascript
运行
复制
   var test = [
          {
            "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 test = [
          {
            "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",
              }
            }
          }
        ]

        test.forEach(ele=> {
        for (let index in ele.main_object.number1){

            var text = ele.main_object;
             var num1  = text.number1[index];
             var op = text.sumtype[index];
             op = op === 'x' ? "*" : op
            op = op === ':' ? "/" : op
             var num2 = text.number2[index];
              console.log(num1 + text.sumtype[index] + num2 +'=' + eval(num1 + op + num2))

        }

        })
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51172506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档