var arr = [30];
delete arr[0];
if (arr.length == 0) {
alert("empty");
}
仅由于删除,此代码将不起作用。 有没有一种终极方法可以检查数组是否为空?
谢谢:)
答案 0 :(得分:1)
您可以使用Object.values()
从数组中获取实际值。如果values数组的长度为0,则根据您的定义,该数组为空。
const checkIfSparseIsEmpty = arr => !Object.values(arr).length
var arr1 = [30];
delete arr1[0];
console.log(checkIfSparseIsEmpty(arr1)) // true
var arr2 = [1, 2, 3]
delete arr2[0]
delete arr2[1]
console.log(checkIfSparseIsEmpty(arr2)) // false
console.log(checkIfSparseIsEmpty(Array(10))) // true
答案 1 :(得分:0)
预期行为背后的原因是,当您使用delete
运算符时,它会用undefined
替换元素,并且由于长度不变,因此上述检查无效。
从数组中有效删除元素的一种方法是使用filer
array function
。
示例:
function deleter(arr, toDelete) {
let newArray = arr.filter((ar) => {
return ar !== toDelete;
})
return newArray;
}
let array = [1,2,3,4,5]
console.log(deleter(array, 5));
现在要检查数组中是否存在元素,可以使用indexOf
array
上的prototype
方法。
以下是一个示例:
function deleter(arr, toDelete) {
let newArray = arr.filter((ar) => {
return ar !== toDelete;
})
return newArray;
}
let array = [1,2,3,4,5]
let toDelete = 5;
let newArr = deleter(array, toDelete);
console.log(newArr.indexOf(toDelete))
// -1 corresponds to the element not found.