【问题标题】:Javascript: How to remove only one value from duplicate array valuesJavascript:如何从重复的数组值中仅删除一个值
【发布时间】:2017-04-20 14:20:38
【问题描述】:

我有一个数组['2530491','2530491','2530491','2530492'] 2530491 被重复三次,我想从其中的 3 个中删除单个值 2530491,所以输出如下: ['2530491','2530491','2530492'].

fileArrayAnnounce_size = jQuery.grep(fileArrayAnnounce_size, function(value){
  return value != file_size.metas[0].size;
});

我尝试抓握,但它会删除所有相同的值。我只想从重复项中删除一个值。

【问题讨论】:

  • 规则到底是什么......允许 2 个重复但不能再重复?
  • @charlietfl 似乎是这样。两次但不是三次。
  • 只要我删除了一个,甚至超过 2 个重复。只是为了从重复中删除单个值,无论有多少重复
  • 那么如果有四个相同的,你还是不想删除一个?你能澄清一下规则吗?

标签: javascript jquery arrays


【解决方案1】:

您可以使用spliceindexOf 删除第一个实例:

fileArrayAnnounce_size.splice(fileArrayAnnounce_size.indexOf('2530491'), 1)

更安全的方式:

var index = fileArrayAnnounce_size.indexOf('2530491')
if (index > -1) {
    fileArrayAnnounce_size.splice(index, 1);
}

检查并删除重复项:

var mapOfValues = fileArrayAnnounce_size.reduce(function(vals, current) {
    if (vals[current]) {
        vals[current]++;
    } else {
        vals[current] = 1;
    }

    return vals;
}, {});

现在检查并删除任何超过 1 个值的内容:

for (var value in mapOfValues) {
    if (mapOfValues[value] > 1) {
        var idx = fileArrayAnnounce_size.indexOf(value);
        fileArrayAnnounce_size.splice(idx, 1);
    }
}

演示:https://jsfiddle.net/1277mxt9/

【讨论】:

  • 你不需要检查一个值是否有重复吗?否则所有值都将被删除。
  • 不知道这是如何验证重复存在的
  • 我的意思是,这只有在你知道重复值的情况下才有效。
  • 更新了代码以查找重复项或更多项,然后删除其中每个值中的 1 个
  • 很确定上面的编辑工作正常@evolutionxbox
【解决方案2】:

您可以检查给定元素是否具有重复元素,如果是,则从原始数组中仅删除指定元素的一个重复条目。

var arr = ['2530491','2530491','2530491','2530492'],
    hash = [...new Set(arr)];
    hash.forEach((v,i) => arr.indexOf(v) != arr.lastIndexOf(v) ? arr.splice(arr.indexOf(v), 1) : null);
    
    console.log(arr);

【讨论】:

  • 我喜欢简洁
【解决方案3】:

您可以使用filter() 并将一个对象作为thisArg 参数传递以将其用作哈希表。

var data = ['2530491','2530491','2530491','2530492', '2530492'];

var result = data.filter(function(e) {
  if(!this[e]) this[e] = 1
  else if (this[e] == 1) return this[e] = 2, false
  return true;
}, {})

console.log(result)

【讨论】:

    猜你喜欢
    • 2016-09-15
    • 2023-03-31
    • 2015-09-24
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    • 2018-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多