【问题标题】:Make a Array with Unique elements in JQuery [duplicate]在JQuery中创建一个具有唯一元素的数组[重复]
【发布时间】:2014-06-12 06:25:26
【问题描述】:

我得到一个像

这样的数组
["cat, Kitchen", "dog", "Kitchen, dog", "Kitchen"].

我怎样才能从中得到一个独特的数组。我试过split(', '),但我在浏览器中收到错误.split is not a function

我希望最终的数组是:

["cat", "Kitchen", "dog"]

请让我知道如何为此输出编写 jQuery

在此先感谢....

【问题讨论】:

  • cat 之后和第二个dog 之前的缺失引号是故意的吗?

标签: javascript jquery unique


【解决方案1】:

jQuery.unique(["cat", "Kitchen", "dog", "Kitchen", "dog", "Kitchen"].join(",").split(","))

【讨论】:

  • 这个答案对这个问题有什么意义?
【解决方案2】:
function unique(array) {
    if (array) {
        var found = {};
        array = array.join(",").split(",").filter(function (x) {
            x = x.trim();
            return (found[x] ? false : (found[x] = x));
        })
    }
    return array;
}

console.log(unique(["cat, Kitchen", "dog", "Kitchen, dog", "Kitchen"]));

演示:http://jsfiddle.net/diode/2P2Kg/

仅在 Chrome 中测试,因此不确定这是否适用于所有浏览器。可能不是完美的解决方案,但这是您可以继续前进的方向。

【讨论】:

    【解决方案3】:

    试试这个Demo Fiddle

    var arr = ["cat", "Kitchen", "dog", "Kitchen", "dog", "Kitchen"];
    unique(arr);
    
    
    function unique(arrList) {
        var final = [];
        $.each(arrList, function (i, e) {
            if ($.inArray(e, final) == -1) final.push(e);
        });
        console.log(final);
    }
    

    注意:

    您声明数组的方式是错误的 - ["cat, Kitchen", "dog", "Kitchen, dog", "Kitchen"]。它没有重复的元素 - "cat, Kitchen" 被计为一个。

    应该是["cat", "Kitchen", "dog", "Kitchen", "dog", "Kitchen"].

    【讨论】:

      【解决方案4】:

      1) 数组列表中的双引号漏掉了。

      2) 使用下面的函数获取javascript中的唯一数组

      var uniqueArray =["cat", "Kitchen", "dog", "Kitchen", "dog", "Kitchen"];
      
      function GetUnique(inputArray)
      {
          var outputArray = [];
      
          for (var i = 0; i < inputArray.length; i++)
          {
              if ((jQuery.inArray(inputArray[i], outputArray)) == -1)
              {
                  outputArray.push(inputArray[i]);
              }
          }
      
          return outputArray;
      };
      
      alert(GetUnique(uniqueArray))
      

      DEMO

      或与 jquery 一起使用

      var uniqueArray = ["cat", "Kitchen", "dog", "Kitchen", "dog", "Kitchen"];
      
      alert($.unique(uniqueArray));
      

      DEMO

      【讨论】:

        【解决方案5】:
        var streetaddress_hs = ["cat", "Kitchen", "dog", "Kitchen", "dog", "Kitchen"];
        var streetaddress2 = [];
        $.each(streetaddress_hs, function (i, el) {
            if ($.inArray(el, streetaddress2) === -1) streetaddress2.push(el);
        });
        availableTags = streetaddress2;
        alert(availableTags);
        

        【讨论】:

          【解决方案6】:

          编辑:扩展已接受的答案(删除重复条目):

          ["cat, Kitchen", "dog", "Kitchen, dog", "Kitchen"].join(",").split(",").
            map(function(entry){return entry.trim();}).
            filter(function(entry, i, a) { return a.indexOf(entry) === i; });
          

          我通过一系列转换解决了它,不需要 jQuery。 不过,不能更好地命名它,因为我不知道真正的交易是什么。

          function doItsThing (crazyArray) {
          
            function toArrays (entry) {
              return entry.split(',');
            }
            function toAFlatArray (arrays, entry) {
              return arrays.concat(entry);
            }
            function trim (entry) {
              return entry.trim();
            }
            function dedupe (entry, index, array) {
              return array.indexOf(entry) == index;
            }
          
            return crazyArray.
              map(toArrays).
              reduce(toAFlatArray, []).
              map(trim).
              filter(dedupe);
          }
          
          doItsThing(["cat, Kitchen", "dog", "Kitchen, dog", "Kitchen"])
          

          或者,如果你希望它全部内联(虽然不那么可读,与上述相比,imo):

          function doItsThing (crazyArray) {
            return crazyArray.
              map(function (entry) {
                return entry.split(',');
              }).
              reduce(function (collection, entry) {
                return collection.concat(entry);
              }, []).
              map(function (entry) {
                return entry.trim();
              }).
              filter(function (entry, index, collection) {
                return collection.indexOf(entry) == index;
              });
          }
          
          doItsThing(["cat, Kitchen", "dog", "Kitchen, dog", "Kitchen"])
          

          当然可以改进,但这就是想法。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-03-24
            • 1970-01-01
            • 1970-01-01
            • 2010-10-26
            • 2018-09-24
            • 1970-01-01
            • 2014-09-14
            • 1970-01-01
            相关资源
            最近更新 更多