我如何在javascript中构建一个执行以下操作的函数:
输入:
var data = [null, 1, 2, 3, null, null, 2, null, 4]
输出:
dataset = [
[null, 1, 2, 3, null, null, null, null, null],
[null, null, null, null, null, null, 2, null, null],
[null, null, null, null, null, null, null, null, 4],
]
实际上在这个例子中,我的输入有3组无空值:这些集合是:[1,2,3],[2]和[4]
从这些集合我想构建具有这些值(非空集)的数组,并保存与输入数组相同的索引
谢谢
答案 0 :(得分:1)
这是我的结果:
var data = [null, 1, 2, 3, null, null, 2, null, 4];
var dataset = [[]];
for(var i = 0; i < data.length; i++) {
if(!data[i]) {
if(!data[i-1]) {
dataset[dataset.length-1].push(data[i]);
} else {
for(var fillRight = i; fillRight < data.length; fillRight++) {
dataset[dataset.length-1].push(null);
}
dataset.push([null]);
for(var fillLeft = 0; fillLeft < i; fillLeft++) {
dataset[dataset.length-1].push(null);
}
}
} else {
dataset[dataset.length-1].push(data[i]);
}
}
答案 1 :(得分:1)
var data = [null, 1, 2, 3, null, null, 2, null, 4],
result = [];
data.reduce(function (r, a, i) {
if (a !== null) {
if (r === null) {
result.push(Array.apply(null, { length: data.length }).map(function () { return null; }));
}
result[result.length - 1][i] = a;
}
return a;
}, null);
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
答案 2 :(得分:0)
你在这里..
var a = [null, 1, 2, 3, null, 2, null, null, 4, null];
var b = []; // result
for (var arr = null, i = 0; i < a.length; i++) {
if (a[i] === null) {
arr = null;
} else {
if (!arr) {
if(b.length) b[b.length-1] = b[b.length-1].concat(Array(a.length-i).map(function(){return null}))
b.push(arr = Array.apply(null, Array(i)).map(function() {
return null
}));
}
arr.push(a[i]);
}
}
document.body.textContent = JSON.stringify(b); // just print the result
&#13;
基于这个答案:https://stackoverflow.com/a/34513955/4339170
我只添加了这些行:
if(b.length) b[b.length-1] = b[b.length-1].concat(Array(a.length-i).map(function(){return null}))
b.push(arr = Array.apply(null, Array(i)).map(function() {return null}));
当第一个部分完成时,第一个用空值填充结尾,第二个用空值填充新部分的前面