在添加新元素之前,如何从父数组中完全删除一个空数组。
我有一个看起来像这样的结构
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"]]
答案 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)