【问题标题】:Preventing array from adding duplicate element防止数组添加重复元素
【发布时间】:2020-12-06 12:33:36
【问题描述】:

我有这段代码:

var letters = ['A', 'B', 'C']
const letter1 = 'B'

for(var i=0; i<letters.length; i++) {
    var letter = letters[i]
    if (letter1 === letter) {
        console.log(letter)
        break
    } else {
        letters.push(letter1)
        break
    }
}

console.log(letters)

运行这段代码后,我得到了这样的结果:

['A', 'B', 'C', 'B']

但我想要这个结果:

['A', 'B', 'C']

我该怎么做?

【问题讨论】:

  • 为什么不允许欺骗,然后在完成向此数组中添加内容后将其删除?
  • 在推送之前检查它是否已经在数组中?

标签: javascript node.js arrays


【解决方案1】:

最简单的解决方案是在推送之前检查值是否在数组中:

if (!letters.includes(letter1)) letters.push(letter1)

如果要从数组中删除重复项,可以将其转换为 Set 并再次返回:

[...new Set(letters)]

或者,您可以只使用 Set 而不是数组,该数组用于存储唯一值:

const letters = new Set(['A', 'B', 'C'])
// Use add instead of push (there is no push method on Set)
letters.add(letter1)

如果您不想重复,我不确定为什么要将 letter1 ('B') 推送到数组中。

【讨论】:

  • Set 是要走的路
  • 我想按'B'来检查它是否已经存在于数组中。
【解决方案2】:
function removeDuplicate(payload) {
    const result = [];

    payload.forEach(function(value) {
        if(result.indexOf(value) == -1) {
            result.push(value)
        }
    })

    return value
}

【讨论】:

  • 在 Stack Overflow 上不鼓励仅使用代码的答案,因为它们没有解释它如何解决问题。请编辑您的答案以解释此代码的作用以及它如何回答问题,以便它对 OP 以及其他有类似问题的用户有用。
【解决方案3】:

在插入前检查数组是否有元素。

Array.proptotype.includes() 会有所帮助

if(!extingArray.includes(element)) {
    existingArray.push(element)
}

【讨论】:

    【解决方案4】:

    使用letters.pop() 删除可能输入到数组末尾的任何重复项。

    【讨论】:

      猜你喜欢
      • 2020-12-09
      • 2020-04-16
      • 2021-09-23
      • 1970-01-01
      • 2012-06-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-26
      • 2017-04-04
      相关资源
      最近更新 更多