【问题标题】:How to delete array from array?如何从数组中删除数组?
【发布时间】:2021-12-17 21:00:15
【问题描述】:

excellentposts关于从数组中删除元素和数组,但我找不到任何适合这种情况的方法:

如何删除包含UUID 作为其第一个元素的数组?

let arr = [
  ['Log entry ID', '_id'],
  ['UUID', '_source.uuid'],
  ['Timestamp', '_source.@timestamp'],
  ['Description', '_source._desc']
];

【问题讨论】:

  • arr.filter(el => el[0] !== 'UUID')?
  • 如果有机会请查看我的解决方案。在这里使用filter() 确实不是一个理想的解决方案,因为我们应该使用const,而不是let

标签: javascript node.js arrays ecmascript-6


【解决方案1】:

@RameshReddy 和@HarunYilmaz 已经很好地介绍了检查第一个元素。

检查第一个元素的另一种方法是:

arr = arr.filter(([first]) => first !== 'UUID');

let arr = [
  ['Log entry ID', '_id'],
  ['UUID', '_source.uuid'],
  ['Timestamp', '_source.@timestamp'],
  ['Description', '_source._desc']
];

arr = arr.filter(([first]) => first !== 'UUID');

console.log(arr);

【讨论】:

  • 添加...rest 作为第二个参数会导致每次filter() 迭代顶级数组时进行不必要的迭代。因为您没有使用 ...rest 值,您可以简单地忽略它们,只将第一个值解构到参数中。
  • @BrandonMcConnell,你说得对。谢谢。
  • 很高兴我能帮助 ?? 一个很好的解决方案。我在帖子中提到的唯一其他建议是使用splice() 而不是filter(),因为splice() 允许我们使用const 而不是let 定义我们的数组变量,如果有机会,我们应该始终选择它。
  • 出于这个原因,我对您的回答以及我最初的建议留下了最初的反对票。我并没有任何冒犯的意思,随着您的回答有所改善,我已经删除了反对票。干杯:)
【解决方案2】:

默认情况下,您应该尽可能使用const,而不是let,因此filter() 不是理想的解决方案。

使用const,您仍然可以使用splice() 方法有效地删除所需的数组元素。

splice() 方法遵循splice(start, deleteCount, ...items) 语法,其中start 是开始拼接的索引,deleteCount 是您希望从start 索引开始删除的元素数,@987654335 @ 是您希望在删除完成后在同一 index 注入的任意数量的项目。

删除是可选的,如果您不想删除任何元素,可以替换为 0,但对于这个问题,我们将删除 1 元素,并且我们将排除 items 参数,这也是可选,因为我们不想注入任何额外的元素。

对于您的任务,我们首先需要找到第一个元素等于UUID 的数组元素的索引。我们可以像这样使用findIndex()

const index = arr.findIndex(e => e[0] === 'UUID');

接下来,我们可以像这样使用index 值来执行我们的splice()

arr.splice(index, 1); // 1 for deleting a single array element

我们将这两个步骤合二为一:

arr.splice(arr.findIndex(e => e[0] === 'UUID'), 1);

它在起作用,包括数组定义:

const arr = [
  ['Log entry ID', '_id'],
  ['UUID', '_source.uuid'],
  ['Timestamp', '_source.@timestamp'],
  ['Description', '_source._desc']
];

arr.splice(arr.findIndex(e => e[0] === 'UUID'), 1);

console.log(arr);

【讨论】:

  • 非常感谢您的详细解释。为什么const 不保护splice() 不对其进行修改?有没有其他功能可以修改consts?我以前从未听说过。
  • 是的! const 变量不能简单地“重置”为任何其他值。当我们将const 变量的值设置为数组时,我们不能通过直接将其设置为另一个值(例如arr = [1])来重置该变量,但是由于数组是对象,我们可以通过对数组执行操作来改变数组本身它。这适用于所有对象——数组、普通对象、字符串对象、数字对象等。但是这不适用于原语,这是我们在使用字符串和数字时经常习惯使用的:javascripttutorial.net/javascript-primitive-vs-reference-values跨度>
  • @SandraSchlichting 如果这回答了您的问题,您介意选择我的解决方案作为您问题的可接受答案吗?
【解决方案3】:

如果只想移除第一项'UUID'的元素,可以将过滤条件设置为第一项是否不是'UUID'

let arr = [
  ['Log entry ID', '_id'],
  ['UUID', '_source.uuid'],
  ['Timestamp', '_source.@timestamp'],
  ['Description', '_source._desc']
];

const res = arr.filter(e => e[0]!='UUID')

console.log(res)

【讨论】:

    【解决方案4】:

    您可以将Array.filter()Array.includes() 一起使用,如下所示:

    let arr = [
      ['Log entry ID', '_id'],
      ['UUID', '_source.uuid'],
      ['Timestamp', '_source.@timestamp'],
      ['Description', '_source._desc']
    ];
    
    arr = arr.filter(subarr => !subarr.includes('UUID'));
    // Or you can use subarr[0] !== 'UUID' if you want to check only first element
    
    console.log(arr)

    【讨论】:

    • 您可以使用 !subarr[0] !== 'UUID' 检查 first 元素或使用 !subarr.includes('UUID') 检查 any 元素。 !subarr[0].includes('UUID') 在这种情况下没有意义。
    猜你喜欢
    • 1970-01-01
    • 2019-09-05
    • 1970-01-01
    • 2013-10-28
    • 2021-12-27
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    相关资源
    最近更新 更多