代码之家  ›  专栏  ›  技术社区  ›  Willy David Jr

如果使用delete,如何在javascript中计算数组中的所有值

  •  1
  • Willy David Jr  · 技术社区  · 7 年前

    我正在删除数组的索引。既然这样删除:

    delete arr[index];
    

    将删除索引,但不会影响数组的索引,这正是我的功能所需要的。

    我遇到的问题是它的长度没有改变:

    console.log(arr.length);
    

    将返回与以前相同的索引。如果使用了删除功能,是否有方法检索数组中的实际值数?

    6 回复  |  直到 7 年前
        1
  •  0
  •   Davin Tryon    7 年前

    如果你确信你没有任何虚假的价值观。然后,您可以简单地:

    arr.filter(Boolean).length
    

    但是,您需要一个更好的过滤函数来计算一些值(例如 0 )

        2
  •  1
  •   Mohamed Ibrahim Elsayed    7 年前

    你可以使用 splice 相反,在您的情况下:

    arr.splice(index, 1);

    试试这个:

    let arr=[1, 2, 3, 4, 5]; //length 5
    arr.splice(0, 1); //length 4
    

    更新

    如果要在知道数组中的实际值数的同时保留数组中的索引,我建议您通过维护 counter 价值观:

    delete arr[index];
    counter--;
    

    而不是读书 arr.length 你可以用 柜台

        3
  •  1
  •   Nishant Dixit    7 年前

    是的,但是 delete 部分用于数组,主要用于对象。您可以为此使用拼接或过滤器

    arr.splice(index, 1);
    

    或者,如果您想要严格使用当前的解决方案,那么就用这种方式获取长度。

    var count  = a.filter(val=>val != '').length;
    
        4
  •  1
  •   Nick Zuber    7 年前

    这里的问题是 delete removes the item from an array but doesn't affect the length .

    得到 长度,您可以对数组中的所有非空元素进行计数。像这样简单的事情是可行的:

    function getLengthWithoutEmptyElements (array) {
      return array.filter(() => true).length;
    }
    
    const arr = [0, 1, 2, 3];
    delete arr[2];
    
    console.log(arr.length) // 4, unchanged (bad)
    console.log(getLengthWithoutEmptyElements(arr)) // 3, correct (good)
    

    这是因为当 empty 元素似乎仍存在于数组中,但实际上已不存在(调用时对它的所有引用都已销毁) 删除 )

    所以,如果过滤数组并在每个元素上返回true, 事实上 在它中,你将得到一个没有空元素的数组,所以我们可以得到它的长度。

    注释

    这种方法 array.filter(() => true).length 作品 全部的 投入,因为它会 只有 忽视 空的 值,这很好,因为错误地过滤掉错误的值不会得到错误的结果。

        5
  •  0
  •   Mosè Raguzzini    7 年前

    如果要保留上一个数组的索引,则只能根据需要对其进行筛选以除去 伪值 作为 undefined null

    const arr = [1,2,3,4,5,6];
    delete arr[1];
    console.log(arr.filter(o => o).length);
        6
  •  0
  •   Aweuzegaga    7 年前

    我正在删除数组的索引。既然这样删除:

    delete arr[index];

    将删除索引,但不会影响数组的索引,这正是我的功能所需要的。

    “删除”将元素的值更改为 未定义 ( https://www.w3schools.com/js/js_array_methods.asp ,它不会实际删除元素。

    如果你不想离开的话 未定义 数组中的孔可以计算不是 未定义 但在我看来,这不是一个好的做事方式。

    您可能需要创建一个对象数组,在其中添加元素时指定一个索引值。然后在删除数组元素时保留自定义索引