我有一个JSON对象,用于存储来自API GET请求的数据。对象中的每个对象都有两个数组。我需要乘以第二个数组(y值)。数据存储如下:
var apiData = {
'id1': {
x: [],
y: []
},
'id2': {
x: [],
y: []
},
'id3': {
x: [],
y: []
},
等等。有50个阵列需要将它们的每个值相乘。
我明白我需要做这样的事情:
var multiplyFunction = function() {
for (var i = 0; i < apiData.length; i++);
[do something]
}
但是,我怎样才能将y数组中的所有元素乘以一个数字(如1,000)?我看了几个其他主题,但不清楚。谢谢!
更新:
我已经找到了一个解决方案,它将值从API数据推送到数组时相乘。像这样:
for (var i = 0; i < data.length; i++) {
apiDataObject[id].x.push(data[i][0]);
/* Multiply each value by 1,000 to convert units. */
apiDataObject[id].y.push(data[i][1] * 1000);
}
这对于浏览器兼容性也更好。
解。
var multiplier = 1000;
Object.keys(apiData).forEach(key => {
apiData[key].y = apiData[key].y.map(item => item * multiplier);
});
你可以这样做:
Object.keys(apiData).forEach(key => {
// 1000 - it's a number what you need
apiData[key].y = apiData[key].y.map(x => x * 1000)
})
apiData不是数组,这是对象。
https://jsbin.com/sitonogoso/edit?html,js,console
// es5
var multiplyFunction = function() {
var y = 1;
for (key in apiData) {
var data = apiData[key];
// array = y;
var array = data.y;
for (var i = 0; i < array.length; i++) {
// y = y * array[i];
}
}
return y;
}
console.log(multiplyFunction());
如果你不关心支持IE,那么你最好的选择是使用Object.values
,然后使用Array#map
。
let apiData = {
'id1': {
x: [],
y: [5, 8]
},
'id2': {
x: [],
y: [9, 6]
},
'id3': {
x: [],
y: [50, 31]
}
};
let multiplier = 100;
Object.values(apiData).forEach(item => {
item.y = item.y.map(number => number * multiplier);
});
console.log(apiData);
我已经找到了一个解决方案,它将值从API数据推送到数组时相乘。像这样:
for (var i = 0; i < data.length; i++) {
apiDataObject[id].x.push(data[i][0]);
/* Multiply each value by 1,000 to convert units. */
apiDataObject[id].y.push(data[i][1] * 1000);
}
这对于浏览器兼容性也更好。