我有一个非常简单的JavaScript数组,可能包含重复项。
var names = ["Mike","Matt","Nancy","Adam","Jenny","Nancy","Carl"];
我需要删除重复项并将唯一值放入一个新数组。
我可以指出我尝试过的所有代码,但我认为这没有用,因为它们不起作用。我接受jQuery解决方案。
我有一个非常简单的JavaScript数组,可能包含重复项。
var names = ["Mike","Matt","Nancy","Adam","Jenny","Nancy","Carl"];
我需要删除重复项并将唯一值放入一个新数组。
我可以指出我尝试过的所有代码,但我认为这没有用,因为它们不起作用。我接受jQuery解决方案。
https://jsfiddle.net/2w0k5tz8/
function remove_duplicates(array_){
var ret_array = new Array();
for (var a = array_.length - 1; a >= 0; a--) {
for (var b = array_.length - 1; b >= 0; b--) {
if(array_[a] == array_[b] && a != b){
delete array_[b];
}
};
if(array_[a] != undefined)
ret_array.push(array_[a]);
};
return ret_array;
}
console.log(remove_duplicates(Array(1,1,1,2,2,2,3,3,3)));
循环遍历数组,去除重复项,并创建一个克隆数组占位符,因为数组索引不会被更新。
为了更好的性能,反向循环(您的循环将不需要不断检查数组长度)。
function diffArray(arr1, arr2) {
var newArr = arr1.concat(arr2);
newArr.sort();
var finalArr = [];
for(var i = 0;i<newArr.length;i++) {
if(!(newArr[i] === newArr[i+1] || newArr[i] === newArr[i-1])) {
finalArr.push(newArr[i]);
}
}
return finalArr;
}
使用ES5的Object.keys
方法是一种不需要写很多代码的方法:
var arrayWithDuplicates = ['a','b','c','d','a','c'],
deduper = {};
arrayWithDuplicates.forEach(function (item) {
deduper[item] = null;
});
var dedupedArray = Object.keys(deduper); // ["a", "b", "c", "d"]
从函数中提取
function removeDuplicates (arr) {
var deduper = {}
arr.forEach(function (item) {
deduper[item] = null;
});
return Object.keys(deduper);
}
arrayWithDuplicates
。 - Oriol对于任何想要将具有重复元素的数组展平为一个唯一数组的人:
function flattenUniq(arrays) {
var args = Array.prototype.slice.call(arguments);
var array = [].concat.apply([], args)
var result = array.reduce(function(prev, curr){
if (prev.indexOf(curr) < 0) prev.push(curr);
return prev;
},[]);
return result;
}
function arrayDuplicateRemove(arr){
var c = 0;
var tempArray = [];
console.log(arr);
arr.sort();
console.log(arr);
for (var i = arr.length - 1; i >= 0; i--) {
if(arr[i] != tempArray[c-1]){
tempArray.push(arr[i])
c++;
}
};
console.log(tempArray);
tempArray.sort();
console.log(tempArray);
}
var array = ["Mike","Matt","Nancy","Adam","Jenny","Nancy","Carl"];
var removeDublicate = function(arr){
var result = []
var sort_arr = arr.sort() //=> optional
for (var i = 0; i < arr.length; i++) {
if(arr[ i + 1] !== arr[i] ){
result.push(arr[i])
}
};
return result
}
console.log(removeDublicate(array))
==> ["Adam", "Carl", "Jenny", "Matt", "Mike", "Nancy"]
这可能是从数组中永久删除重复项的最快方法之一,比这里大多数函数快10倍。在safari中快78倍。
function toUnique(a,b,c){ //array,placeholder,placeholder
b=a.length;while(c=--b)while(c--)a[b]!==a[c]||a.splice(c,1)
}
如果您无法阅读上面的代码,请阅读一本JavaScript书,或者在此处了解更多关于简短代码的说明:https://dev59.com/eXI-5IYBdhLWcg3wqqXh#21353032
嵌套循环方法用于在数组中删除重复元素并保留原始元素顺序。
var array = [1, 3, 2, 1, [5], 2, [4]]; // INPUT
var element = 0;
var decrement = array.length - 1;
while(element < array.length) {
while(element < decrement) {
if (array[element] === array[decrement]) {
array.splice(decrement, 1);
decrement--;
} else {
decrement--;
}
}
decrement = array.length - 1;
element++;
}
console.log(array);// [1, 3, 2, [5], [4]]
解释: 内部循环将数组的第一个元素与从最高索引处开始的所有其他元素进行比较。向第一个元素递减时,会从数组中拼接出一个重复项。
当内部循环完成后,外部循环将增加到下一个元素进行比较,并重置数组的新长度。
const numbers = [1, 1, 2, 3, 4, 4];
function unique(array) {
return array.reduce((a, b) => {
let isIn = a.find(element => {
return element === b;
});
if (!isIn) {
a.push(b);
}
return a;
}, []);
}
let ret = unique(numbers); // [1, 2, 3, 4]
console.log(ret);
_.uniq(peoplenames)
解决了这个问题。请参考 http://lodash.com/docs#uniq 了解更多信息。 - Connor Leechconst result = data.sort().filter((v, idx, t) => idx==0 || v != t[idx-1]);
- Didier68