这段代码不是很理解,求大神帮忙科普下。主要是2个for循环中的代码有点没看懂,方便的话给加上注释解释下。
var array = ['c', 'a', 'z', 'a', 'x', 'a'];
function clear() {
var o = {};//字面量方式创建个空对象
for(var i = 0; i < array.length; i++) {
var item = array[i];//这段及以下代码怎么理解?
if(o[item]) {
o[item]++;
} else {
o[item] = 1;
}
}//end for
var tmpArray = [];
for(var key in o) {
if(o[key] == 1) {
tmpArray.push(key);
} else {
if(tmpArray.indexOf(key) == -1) {
tmpArray.push(key);
}
}
}//end for
return tmpArray;
}//end function
console.log(clear(array));
@shoyuf 答案是对的,本段代码是通过Object key值的唯一性进行数组去重,然而这种方法仅仅对字符串数组去重有效,因为最终它是取对象的key值push进tmpArray,而对象的key值是字符串类型。如果需要去重的数组是[1, 1, 4, 8, 10, 8],根据此方法最终得到的结果是['1', '4', '8', '10'],改变了数据的类型,所以在不知道数组具体数据的类型时,不建议使用。
推荐一种数组去重的简单方法: