从父数组过滤一个空数组

时间:2018-12-21 08:12:36

标签: javascript node.js lodash

在添加新元素之前,如何从父数组中完全删除一个空数组。

我有一个看起来像这样的结构

var parentArray = [ ['123', '345'], [], ['12'] ]

我想在添加新数组之前删除索引1处的数组。

我已经尝试过了,但是并没有将其删除:

parentArray.filter((array, index) => {
    if (array.length === 0) {
        parentArray.splice(index, 1);
    }
})
parentArray.push(['435']);

console.log(parentArray);  //Still give  [["123", "345"], [], ["12"]]

6 个答案:

答案 0 :(得分:2)

您不应在filter方法中对数组进行变异。 如果要保留该项目,则回调函数应返回true,否则,则返回false。

const parentArray = [['123', '345'], [], ['12']];

const filteredArray = parentArray.filter( item => item.length !== 0);

console.log(filteredArray)

答案 1 :(得分:1)

不需要lodash或第3部分库,这实际上是您需要的,

var numbers = [ ['123', '345'], [], ['12'] ]

result = numbers.filter(x => x.length > 0);
console.log(result);

答案 2 :(得分:0)

为此使用_.filter

parentArray = _.filter(parentArray, function (array) {
    return array.length > 0;
})

答案 3 :(得分:0)

以下代码保留不为空的项目并将其存储在结果中。

const result = _.filter(parentArray, (item, i) => {
  return !_.isEmpty(item);
});
console.log(result);

答案 4 :(得分:0)

好吧,首先,如上所述,在迭代过程中不要使任何迭代变量发生变化。
并且Array.filter根据给定的条件返回一个新数组,并且不会更改正在调用它的数组。
如果您想保留原始的parentArray并创建一个新的数组,而parrentArray中没有空数组,请执行以下操作

let parentArray2 = parentArray.filter(e=>e.length !== 0)

这将为您提供parentArray2引用的新数组,该数组将为
[ [ '123', '345' ], [ '12' ] ]
并且parentArray保持不变,然后您可以将新数组推入parentArray2

如果您不想保留原始的parentArray,请执行以下操作
parentArray = parentArray.filter(e=>e.length !== 0)
父数组将使用新的[ [ '123', '345' ], [ '12' ] ]数组进行初始化
然后您可以将任何元素为数组或对象的元素推入parentArray

答案 5 :(得分:0)

您可以将lodash的_.reject()_.isEmpty()结合使用。

如果谓词返回true,而isEmpty对于空数组返回true,则拒绝删除项。

var parentArray = [ ['123', '345'], [], ['12'] ]

var result = _.reject(parentArray, _.isEmpty)

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

不带破折号,您可以使用Array.filter(),而只需返回length。由于0虚假,因此该项目将被删除:

const numbers = [ ['123', '345'], [], ['12'] ]

const result = numbers.filter(o => o.length)

console.log(result)