我一直在尝试并搜索如何遍历参数以检查数组中是否已经存在,我还没有完全正常工作但是当存在重复值时它根本不会返回。
idear是传递多个值的参数然后循环遍历这些值,只有在数组中不存在时才推送。
var arr = [7,3,1];
function pushNew(obj) {
var prams = obj;
for(var k = 0; k < obj.length; k++){
for (var i = 0; i < arr.length; i++) {
if (arr[i] == prams[k]) {
return;
}
}
array.push(prams[k]);
}
// console.info(arr);
}
pushNew([2,7,4]);
答案 0 :(得分:3)
获取所有唯一值的简短且更现代的方法是将Array.from
与Set
一起使用。 Set
是一种类似于数组的结构,只能保存唯一值。 Array.from
将类似数组的结构转换为实数数组。
在您的情况下,您可以将两个数组连接起来,将它们传递给Set
以删除重复项,然后使用Array.from
将其转换回常规数组。
var arr1 = [1, 2, 3, 4, 5];
var arr2 = [3, 4, 5, 6, 7];
var result = Array.from(new Set(arr1.concat(arr2)));
document.write(JSON.stringify(result));
答案 1 :(得分:2)
您可以使用indexOf
来验证数组中是否存在元素。 forEach
是另一种类似于循环的数组方法。
var arr = [7,3,1];
function pushNew(obj) {
//var prams = obj;
obj.forEach(function(item){ // iterate through each element
if(arr.indexOf(item) == -1){ //indexOf return -1 is element is not present in an array
arr.push(item)
}
})
console.log(arr);
}
pushNew([2,7,4]);
工作Jsfiddle
答案 2 :(得分:2)
实际上,您现有的代码几乎有效。
如果在内部循环中找到匹配项,您可以设置一个标志,而不是 return ,您应该使用 break 来转义循环。然后在内循环后使用 push ,如果找不到匹配项。此外,不需要 obj 和 prams (我已将其重命名为 params ),所以:
var arr = [7,3,1];
function pushNew(params) {
var found;
for(var k=0; k<params.length; k++){
// Set found to initial value on each outer loop
found = false;
for (var i=0; i<arr.length; i++) {
// If find match, set flag and break from loop (for efficiency)
if (arr[i] == params[k]) {
found = true;
break;
}
}
// If match not found, push into arr
if (!found) arr.push(params[k]);
}
}
pushNew([7,2])
document.write(arr); // 7,3,1,2
&#13;
如果您需要高效代码,请考虑创建索引并在中使用:
var arr = [7,3,1];
function addParams(params) {
var index = arr.reduce(function(acc, v) {
acc[v] = true;
return acc;
},{});
params.forEach(function(v) {
if (!(v in index)) arr.push(v);
});
}
addParams([7,3,2]);
document.write(arr);
&#13;
答案 3 :(得分:1)
var arr = [7, 3, 1];
function pushNew(obj) {
for (var k = 0; k < obj.length; k++) {
if (arr.indexOf(obj[k]) == -1) {
arr.push(obj[k]);
}
}
}
pushNew([2, 7, 4]);
答案 4 :(得分:0)
你可以使用lodash的_.union函数。
_。union([2,1],[4,2],[1,2]); //→[2,1,4]