使用Null分隔符拆分数组

时间:2015-12-29 15:04:19

标签: javascript

是否有方法将数组拆分为使用javascript不包含空值的数组(不开发函数)......

以下是我想要的例子:

输入:

var a = [1, 2, 3, null, 2, null,null, 4]

输出:

[[1, 2, 3], [2], [4]]

谢谢

3 个答案:

答案 0 :(得分:3)

问题

“是否有可以使用的函数来构建我的数组”

答案是

,因为您的需求过于具体”。

但自己做这件事并不难。这是一个解决方案(我在结尾处使用null进行了一个不那么微不足道的输入,并且连续null更具说明性):

var a = [null, 1, 2, 3, null, 2, null, null, 4, null];
var b = []; // result
for (var arr, i=0; i<a.length; i++) {
  if (a[i]===null) {
    arr=null;
  } else {
    if (!arr) b.push(arr=[]);
    arr.push(a[i]);
  }
}
document.body.textContent = JSON.stringify(b); // just print the result
  

正如你所看到的,没有什么美妙或神奇,只是一个乏味的迭代。

答案 1 :(得分:2)

您可以使用reduce

[1, 2, 3, null, 2, null, 4].reduce(function(arr, val) {
  if(val === null) arr.push([]);
  else arr[arr.length-1].push(val);
  return arr;
}, [[]]);

答案 2 :(得分:1)

库中没有可以满足您期望的功能。但如果你简单地接近它,你可以使用下一个方法

var a = [1, 2, 3, null, 2, null, 4]
var result = [], temp = [];

for(var i = 0; i < a.length; i++) {
    if (a[i] === null) {
        if (temp.length == 0) continue;
        result.push(temp);
        temp = [];
    }
    else {
        temp.push(a[i]);
    }
}
if (temp.length != 0) result.push(temp);
// use your result, it gives [[1, 2, 3], [2], [4]]

我添加了一些功能来防止双null出现问题,从null开始到null结束。下一步是将上述代码片段包装在函数中,使用a作为参数,使用result作为返回值。这甚至可以毫无问题地处理a = []