我正在尝试通过广度优先搜索获取邻居列表(具体来说是Block'd游戏中相同颜色邻居球的索引),我的function getWholeList(ballid)
返回一个类似于以下数组:
thelist=["ball_1","ball_13","ball_23","ball_1"]
当然,还有重复的元素。
我尝试使用jQuery.unique()函数来移除它们,但是我猜测它不能处理字符串, 所以有没有其他方法可以使这个数组变成唯一的呢?
感谢任何帮助。
我正在尝试通过广度优先搜索获取邻居列表(具体来说是Block'd游戏中相同颜色邻居球的索引),我的function getWholeList(ballid)
返回一个类似于以下数组:
thelist=["ball_1","ball_13","ball_23","ball_1"]
当然,还有重复的元素。
我尝试使用jQuery.unique()函数来移除它们,但是我猜测它不能处理字符串, 所以有没有其他方法可以使这个数组变成唯一的呢?
感谢任何帮助。
grep
也是不错的选择:function unique(list) {
return $.grep(list, function(n, i) {
return list.indexOf(n) == i;
});
}
- elin作为一个非 jQuery 的解决方案,您可以使用数组 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"]
[2017年编辑] ES6的实现方式如下:
const unique = arr => [...new Set(arr)];
const someArr = ["ball_1","ball_13","ball_23","ball_1", "ball_13", "ball_1" ];
console.log( unique(someArr) );
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()
这里有一个 PHP array_unique
函数的 JavaScript 版本,链接如下: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;
}
或者使用较新的JavaScript:
arr.filter((v, p) => arr.indexOf(v) == p)