1

これと同様の配列を持つプロジェクトに取り組んでいます

var sortBp = [ 'height58em', 'width480px', 'width768px', 'width959px', 'width767px', 'width767px' ];

結果が

var sortBp = [ 'height58em', 'width480px', 'width767px', 'width768px', 'width959px' ];

次の関数を使用して配列を昇順で並べ替えていますが、即値を削除するにはどうすればよいですか?? (上記の場合は'width767px' )

var sortBp = bpArrays.sort(function(a, b) {
                    a = a.replace(/[a-z]/g, '');
                    b = b.replace(/[a-z]/g, '');
                    return a - b;
}); 
4

4 に答える 4

1

まず、並べ替え中に要素を削除することはできません。最初に配列をソートしてから、重複を削除する必要があります。Array.prototype.filterandを使用したソリューションArray.prototype.indexOfは、ソートされていない配列に適している可能性がありますが、配列がソートされているため、ここではオーバーヘッドになります(O(n)それぞれにかかります)。代わりに、配列をループして、要素を前の要素と比較することができます。

function uniq(array) {
  var i, l = array.length, result = [];
  for (i = 0; i < l; i++) {
    if (result[result.length - 1] != array[i]) {
      result.push(array[i]);
    }
  }
  return result;
}

これはUnderscorePrototypeの uniq() 実装と同じです。

最後の注意: これは、並べ替えられた配列でのみ正常に機能することに注意してください。

于 2013-07-31T06:58:14.650 に答える
0

それを見つけた !!

var sortBp = [ 'height58em', 'width480px', 'width768px', 'width959px', 'width767px', 'width767px' ];

uniqueArray = sortBp.filter(function(elem, pos) {
        return sortBp.indexOf(elem) == pos;
});

編集 :

ここで別の解決策を見つけました:http://dreaminginjavascript.wordpress.com/2008/08/22/eliminating-duplicates/

function eliminateDuplicates(arr) {
      var i, len=arr.length, out=[], obj={};
      for (i=0;i<len;i++) {
        obj[arr[i]]=0;
      }
      for (i in obj) {
        out.push(i);
      }
      return out;
}
于 2013-07-31T06:04:18.260 に答える
0
Array.prototype.contains = function(k) {
for ( var p in this)
if (this[p] === k)
  return true;
return false;
};




inputArray.sort();

function uniqueArray(inputArray){
result=[];
for(var i in inputArray){
if(!result.contains(inputArray[i])){
result.push(inputArray[i]);
}
}
return result;
}
于 2013-07-31T07:06:54.103 に答える