我的对象数组如下所示:
[
{
"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])
}
发布于 2018-07-04 11:30:17
可以使用数组进行可枚举数据。数组是基于零的,所以索引从零开始。
为了用给定的操作数计算某个值,可以将一个带有所有操作数的对象作为键。
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; }
发布于 2018-07-04 11:31:52
以下是起诉ES6;Object.keys
,Array.reduce
,Spread operator
,Dynamic key name
的工作片段。
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);
发布于 2018-07-04 11:51:58
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))
}
})
https://stackoverflow.com/questions/51172506
复制相似问题