可能性のある複製:
JavaScript配列で重複する値を見つける最も簡単な方法
文字列の配列に対するjQuery.unique
幅優先検索で隣接リストを取得しようとしています(具体的には Block'd の同じ色の隣接ボールのインデックス)function getWholeList(ballid)
は次のような配列を返します
thelist=["ball_1","ball_13","ball_23","ball_1"]
そしてもちろん、重複があります。
JQuery.unique()でそれらを削除しようとしました。しかし、それは私が推測する文字列では機能しないので、これには何か方法がありますか(配列を一意にする)?
助けてくれてありがとう。
JQuery unique
method は、DOM要素の配列でのみ機能します。
each
および inArray
メソッドを使用して、独自のuniqe関数を簡単に作成できます。
function unique(list) {
var result = [];
$.each(list, function(i, e) {
if ($.inArray(e, result) == -1) result.Push(e);
});
return result;
}
Jquery以外のソリューションとして、次のようにArrays filter
メソッドを使用できます。
var thelist=["ball_1","ball_13","ball_23","ball_1"],
thelistunique = thelist.filter(
function(a){if (!this[a]) {this[a] = 1; return a;}},
{}
);
//=> thelistunique = ["ball_1", "ball_13", "ball_23"]
Array.prototype
の拡張として(短縮されたfilter
コールバックを使用)
Array.prototype.uniq = function(){
return this.filter(
function(a){return !this[a] ? this[a] = true : false;}, {}
);
}
thelistUnique = thelist.uniq(); //=> ["ball_1", "ball_13", "ball_23"]
[Edit 2017]これに関するES6の見解は次のとおりです。
Array.from(["ball_1","ball_13","ball_23","ball_1"]
.reduce( (a, b) => a.set(b, b) , new Map()))
.map( v => v[1] );
これを試してください- Array.unique()
Array.prototype.unique =
function() {
var a = [];
var l = this.length;
for(var i=0; i<l; i++) {
for(var j=i+1; j<l; j++) {
// If this[i] is found later in the array
if (this[i] === this[j])
j = ++i;
}
a.Push(this[i]);
}
return a;
};
thelist=["ball_1","ball_13","ball_23","ball_1"]
thelist=thelist.unique()
jQuery.unique()は、DOM要素の配列に対してのみ機能します。これを見てください(uniqueの拡張バージョン):
PHP array_unique
関数: http://phpjs.org/functions/array_unique
function array_unique (inputArr) {
var key = '',
tmp_arr2 = {},
val = '';
var __array_search = function (needle, haystack) {
var fkey = '';
for (fkey in haystack) {
if (haystack.hasOwnProperty(fkey)) {
if ((haystack[fkey] + '') === (needle + '')) {
return fkey;
}
}
}
return false;
};
for (key in inputArr) {
if (inputArr.hasOwnProperty(key)) {
val = inputArr[key];
if (false === __array_search(val, tmp_arr2)) {
tmp_arr2[key] = val;
}
}
}
return tmp_arr2;
}
または後のJSの時点で:
arr.filter((v, p) => arr.indexOf(v) == p)