使用数组构建数组(javascript)

时间:2015-12-29 18:24:06

标签: javascript

我如何在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]

从这些集合我想构建具有这些值(非空集)的数组,并保存与输入数组相同的索引

谢谢

3 个答案:

答案 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)

只有Array.prototype.reduce()

的提案

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)

你在这里..

&#13;
&#13;
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;
&#13;
&#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}));

当第一个部分完成时,第一个用空值填充结尾,第二个用空值填充新部分的前面