Javascript/jQuery更新日期
我编写了以下正确工作的代码,我正在创建一个新数组,该数组从数字中提取每两个成员并将其除以。样本:Javascript/jQuery更新日期,javascript,jquery,d3.js,graphite,Javascript,Jquery,D3.js,Graphite,我编写了以下正确工作的代码,我正在创建一个新数组,该数组从数字中提取每两个成员并将其除以。样本: var numbers=[{“name”:“testvalue”,“data”:[10]}, {“名称”:“testtotal”,“数据”:[2]}, {“名称”:“prodvalue”,“数据”:[10]}, {“名称”:“prodtotal”,“数据”:[2]}]; var mydata=$.grep(数字,函数(e){ 返回新的RegExp(“^test*”).test(e.name) });
var numbers=[{“name”:“testvalue”,“data”:[10]},
{“名称”:“testtotal”,“数据”:[2]},
{“名称”:“prodvalue”,“数据”:[10]},
{“名称”:“prodtotal”,“数据”:[2]}];
var mydata=$.grep(数字,函数(e){
返回新的RegExp(“^test*”).test(e.name)
});
log(mydata)//打印[{“name”:“testvalue”,“data”:[10]},{“name”:“testtotal”,“data”:[2]}]
结果=[{
“名称”:“测试结果”,
“数据”:[mydata[0][“数据”]/mydata[1][“数据”]]
}];
console.log(result)/[{“name”:“testresult”,“data”:[5]}]
我的问题是关于效率的,我正在做的是有效的还是有更好的方法来做事情?(我是JS/jQuery新手,这就是为什么我要问这个问题)
我不关心数字的内容,我只想把每两个元素分开,每个元素的名称以total或value结尾
按要求采样真实数据。具体来说,数据来自graphite/d3.json
var数据=
[{“target”:“xs12t11.Busy”,“datapoints”:[34,54,65,76,87]},
{“target”:“xs12t11.Total”,“datapoints”:[34,54,2,12,33]}];
我还不能完全确定我是否理解您的要求。我提供了两个示例,它们迭代数据
,并将其转换为结果
给定以下可能为奇数行的输入:
var data =
[ {"target": "xs12t11.Busy", "datapoints": [34,54,65,76,87] },
{"target": "xs12t11.Total", "datapoints": [34,54,2,12,33] },
{"target": "xs12t12.Busy", "datapoints": [34,54,2,12,33]} ];
function sum(inArr) {
var retVal = 0;
for(var i = 0; i < inArr.length; ++i) retVal += inArr[i];
return retVal;
}
var result = [];
// Increment by 2 to grab records in pairs
for(var i = 0; i < data.length; i += 2) {
var series1 = data[i];
var series2 = data[i+1];
// Series1 always exists, but series2 may not
if(!series2) break;
result.push({
name: series1.target.split('.')[0],
data: sum(series1.datapoints)/sum(series2.datapoints)
});
}
console.log(JSON.stringify(result));
示例1对每行中的序列求和,并给出每对行的单个平均值:
var data =
[ {"target": "xs12t11.Busy", "datapoints": [34,54,65,76,87] },
{"target": "xs12t11.Total", "datapoints": [34,54,2,12,33] },
{"target": "xs12t12.Busy", "datapoints": [34,54,2,12,33]} ];
function sum(inArr) {
var retVal = 0;
for(var i = 0; i < inArr.length; ++i) retVal += inArr[i];
return retVal;
}
var result = [];
// Increment by 2 to grab records in pairs
for(var i = 0; i < data.length; i += 2) {
var series1 = data[i];
var series2 = data[i+1];
// Series1 always exists, but series2 may not
if(!series2) break;
result.push({
name: series1.target.split('.')[0],
data: sum(series1.datapoints)/sum(series2.datapoints)
});
}
console.log(JSON.stringify(result));
示例2返回具有一系列平均值的每对行的结果:
function avgSeries(series1, series2) {
var retVal = [];
var len = Math.min(series1.length, series2.length);
for(var i = 0; i < len; i++) retVal.push(series1[i]/series2[i]);
return retVal;
}
var result = [];
// Increment by 2 to grab records in pairs
for(var i = 0; i < data.length; i += 2) {
var series1 = data[i];
var series2 = data[i+1];
// Series1 always exists, but series2 may not
if(!series2) break;
result.push({
name: series1.target.split('.')[0],
data: avgSeries(series1.datapoints, series2.datapoints)
});
}
console.log(JSON.stringify(result));
如果这两项都不符合您的要求,请告诉我。您是否可以控制
数字
?如果是这样,有更好的方法来表示这种结构。现在还不太清楚你在这里做什么,部分原因是数组索引没有那么多信息。是的,问题是这些数据来自d3.json,不幸的是我无法控制,但基本上每个元素都有两个名为“total”和“value”的散列,加上我不能做两次这个请求,所以是的,我被卡住了。我的方法是可行的,但我只是想在这里听取专家的意见。只要你的数据集很小或者你不经常搜索,这不会影响你的性能。我有43项(43*2)。我希望按顺序执行I/I+1,但由于某些原因,d3.json可能不会返回偶数个记录……谢谢!这超出了我的预期:)