2

我有一个形式的数组: [ [ null, 1, 2, null ], [ 9 ], [ 2, null, null ] ]

我想要一个简单的函数来返回我 [ 1, 2, 9, 2 ],如您所见,它消除了空值。

我需要这个,因为数据库中的某些值以这种形式返回,然后我会使用返回的示例进行查询,但没有空值。

谢谢!

4

3 回答 3

6

总是一层深

var arr  = [ [ null, 1, 2, null ], [ 9 ], [ 2, null, null ] ],
    arr2 = [];

arr2 = (arr2.concat.apply(arr2, arr)).filter(Boolean);

小提琴

于 2013-10-04T22:06:13.160 回答
4

假设一个可能的嵌套数组结构:

var reduce = function(thing) {

  var reduction = [];

  // will be called for each array like thing
  var loop = function(val) {

    // an array? 
    if (val && typeof val === 'object' && val.length) {
      // recurse that shi•
      reduction = reduction.concat(reduce(val));
      return;
    }

    if (val !== null) {
       reduction.push(val);
    }

  };

  thing.forEach(loop);

  return reduction;
};

reduce([ [ null, 1, 2, null ], [ 9 ], [ 2, null, null ] ]); 
// [1, 2, 9, 2]

reduce([1, 3, 0, [null, [undefined, "what", {a:'foo'}], 3], 9001]);
// [1, 3, 0, undefined, "what", Object, 3, 9001]

像这样?

于 2013-10-04T22:07:19.073 回答
2

您可以使用LoDash库来实现这一点。

_.flatten()

展平嵌套数组(嵌套可以到任何深度)。

_.compact()

创建一个删除所有错误值的数组。值 false、null、0、""、undefined 和 NaN 都是错误的。

这是示例

var test = [
    [null, 1, 2, null],
    [9],
    [2, null, null]
];
test = _.flatten(test);
test = _.compact(test);
console.log(test)

输出: [1, 2, 9, 2]

于 2013-10-04T22:07:06.537 回答