如何删除jquery数组中的部分重复值

时间:2017-02-20 14:35:47

标签: javascript jquery

我有一个单级别的键/值对数组,如下所示:

var user_filters= ['color=blue', 'size=small', 'shape=circle', 'size=large', 'shape=square']

我需要一个函数来执行以下操作:

  1. 找到所有重复的密钥
  2. 将第一次出现的键/值对替换为第二次出现
  3. 删除第二次出现
  4. 在这种情况下,它会产生以下结果:

    user_filters= ['color=blue', 'size=large', 'shape=square']
    

    像...一样的东西。

    function update_array(){
       $.each(user_filters, function(i){
          var key = this.split('=')[0];
          if(key is second occurrence in user_filters)
          {
              var index = index of first occurrence of key
              user_filters[index] = user_filters[i];
              user_filters.splice(i,1); 
          }
    
       });
    }
    

    最好的方法是什么?谢谢!

5 个答案:

答案 0 :(得分:4)

我会将数据保存在一个对象中,这样任何重复都会自动覆盖前一个条目..

见例如:

var user_filters= ['color=blue', 'size=small', 'shape=circle', 'size=large', 'shape=square'];
var object = {};

for (var i = 0; i < user_filters.length; i++) {
  var currentItem = user_filters[i].split('=');
  var key = currentItem[0];
  var value = currentItem[1];
  object[key] = value;
}

console.log(object);

答案 1 :(得分:0)

您可以使用哈希对象来获取没有重复项的键值对,然后将哈希对象转换回如下数组:

&#13;
&#13;
function removeDuplicates(arr) {
  var hash = arr.reduce(function(h, e) {
    var parts = e.split("=");
    h[parts[0]] = parts[1];
    return h;
  }, {});
  
  return Object.keys(hash).map(function(key) {
    return key + "=" + hash[key];
  });
}

var user_filters = ['color=blue', 'size=small', 'shape=circle', 'size=large', 'shape=square'];

console.log(removeDuplicates(user_filters));
&#13;
&#13;
&#13;

答案 2 :(得分:0)

您可以使用Map自动执行唯一/覆盖,并且能够在需要时为您提供阵列

&#13;
&#13;
var user_filters= ['color=blue', 'size=small', 'shape=circle', 'size=large', 'shape=square'];

var m = new Map(user_filters.map(v => v.split("=")));
console.log([...m.entries()].map(v => v.join("="))); 
&#13;
&#13;
&#13;

答案 3 :(得分:0)

从数组后面迭代会更好, 因此,对于每个唯一键,您需要保持变量true或false(最初为false)。 所以,如果真正的意思已经发生,那么删除它,否则保持它并使其变量为真。

接近你当前的方法要好得多。你不必保留最后一个索引并交换然后删除。

答案 4 :(得分:0)

您可以转换为json,然后再转换回所需的数组格式。在下面的代码中,您将获得所需格式的结果对象。

var user_filters= ['color=blue', 'size=small', 'shape=circle', 'size=large', 'shape=square'];

function toJson(obj){
var output = {};
$.each(obj, function(i){
    var keyvalPair = this.split('=')
  var key = keyvalPair[0];
  output[key]= keyvalPair[1];
});
return output;
}
function toArray(obj){
var output = [];
$.each(obj, function(i){
    output.push(i+"="+obj[i]);
});
return output;
 }
var result = toArray(toJson(user_filters));
 console.log(result);