我正在尝试为图表生成一些原始数据,而我遇到了一个我无法解决的问题。
我有一个包含嵌套数组的数组,其中包含x / y轴的数据
它是根据问题的给定答案生成的,现在可能没有答案的答案,因此它们不会显示在数据中。
让它更容易理解:
questions.length = 5
generatedData = [[3,2],[1,3]]
wantToHaveData = [[0,0],[1,3],[2,0],[3,2],[4,0]]
所以我需要一种方法来在生成的数据中插入所有缺失的数据以实现questions.length
如果我迭代地遍历数组并搜索现有值,那么x轴和y轴之间存在差异,例如:
for(var i; i < questions.length;i++){
if( $.inArray( i, generatedData ) == -1) { // how to let this check only the first entry of nested array ?
generatedData.push([i,0]);
}
我希望有人理解我的问题。
答案 0 :(得分:1)
您可以生成 x 这样的内容
var generatedX = generatedData.map(function(point){return point[0]}); // [3,1]
然后像这样使用循环
for(var i=0; i < questions.length;i++){
if( $.inArray( i, generatedX ) == -1) {
generatedData.push([i,0]);
}
}
答案 1 :(得分:1)
解决方案1:您可以使用原生Array.prototype.some()方法
for(var i = 0; i < questions.length;i++){
if( !generatedData.some(function(datapoint){ return datapoint[0] == i})) {
generatedData.push([i,0]);
}
}
/*generatedData = [[3, 2], [1, 3], [0, 0], [2, 0], [4, 0]]*/
解决方案2:但是,我更愿意构建一个默认值数组,然后填写生成的数组。这样,数据点按顺序返回,性能应该更好。
/* Construct array of default values. [[0,0], [1,0], ...[n,0]]*/
filledData = Array.apply(null, new Array(5)).map(function(elem, idx){return [idx, 0];});
for(var i = 0; i < generatedData.length; i++){
filledData[generatedData[i][0]] = generatedData[i];
}
/*filledData = [[0, 0], [1, 3], [2, 0], [3, 2], [4, 0]]*/
答案 2 :(得分:0)
试试这个
for(var i; i < questions.length;i++)
{
if (typeof generatedData[i,0] !== 'undefined' && generatedData[i,0] !== null)
{
generatedData.push([i,0]);
}
}
答案 3 :(得分:0)
我错过了jQuery
标签,这是实现填充的本地JS方式:
function fill(arr, size){
var tmpArray = [];
var indexes = arr.map(function(e,i){
return {"i":e[0], "e":e};
});
for(var i = 0; i < size; i++){
var selected = indexes.filter(function(e){
return e.i == i;
});
if(selected.length){
for(var x = 0; x < selected.length; x++){
tmpArray.push(selected[x].e);
}
}else{
tmpArray.push([i,0]);
}
}
return tmpArray;
};