删除函数后如何知道数组/对象是否为空?

时间:2019-11-25 19:12:50

标签: javascript arrays object if-statement

var arr = [30];
delete arr[0];
if (arr.length == 0) {
alert("empty");
}

仅由于删除,此代码将不起作用。 有没有一种终极方法可以检查数组是否为空?

谢谢:)

2 个答案:

答案 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.