如果不存在则从params推送到对象

时间:2016-04-29 03:27:42

标签: javascript arrays push

我一直在尝试并搜索如何遍历参数以检查数组中是否已经存在,我还没有完全正常工作但是当存在重复值时它根本不会返回。

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]);

5 个答案:

答案 0 :(得分:3)

获取所有唯一值的简短且更现代的方法是将Array.fromSet一起使用。 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 ),所以:

&#13;
&#13;
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;
&#13;
&#13;

如果您需要高效代码,请考虑创建索引并在中使用

&#13;
&#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;
&#13;
&#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]