2016-04-29 41 views
1

我一直在嘗試和搜索如何通過參數循環來檢查,如果那些已經存在於數組中,我沒有得到它充分的工作,但是當有重複值時根本不會返回。如果不存在從參數中推送到對象

理想是pass多個值是param,然後通過那些vals循環,只有當它不存在於數組中時才推送。

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

回答

2

其實,你現有的代碼差不多的作品。

如果你發現在內環一根火柴,而不是你應該使用突破逃脫循環,可以設置一個標誌。如果找不到匹配,則在內循環之後使用。此外,沒有必要兩個OBJ童車(我已經改名爲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

如果你想有效的代碼,可以考慮創建的索引,並且使用在

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

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

+0

[的forEach(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach)未在IE8工作或更低 – izsl

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

短和更現代的方式,只是讓所有的唯一值是使用Array.fromSet。 A 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));

+0

學到了一些新東西這是更好的方法。謝謝。你可以創建一個jsfiddle嗎? – brk

+0

@ user2181397添加片段以回答問題。 – Joseph

+0

非常感謝! – brk

0

可以使用lodash的_.union功能。 ([1,2],[4,2],[1,2]); //→[2,1,4]

相關問題