2016-01-13 17 views
-1

我有一個對象數組,屬性是id和name。 現在我有一個函數來檢查id和name的重複值。 我的問題是我使功能冗餘。我只想使用一次代碼使其成爲可重用的。如何在javascript中使函數可重用

唯一的區別是屬性名稱。有沒有解決方案只能使用一次該功能?在JavaScript感謝

var data = [{id: 0, name: "lina"}, {id: 1, name: "jona"}, {id: 2, name: "lina"}, {id: 0},{id: 3, name: "anna"}]; 
 

 
function isDuplicateID() {    
 
    for(var i = 0; i < data.length; i++) { 
 
    if(data[i].id === 0) 
 
     continue; 
 
    for(var j = i+1; j < data.length; j++) { 
 
     if(data[j].id === data[i].id) 
 
     return true; 
 
    } 
 
    } 
 
    return false; 
 
} 
 

 
function isDuplicateName() {    
 
    for(var i = 0; i < data.length; i++) { 
 
    if(data[i].name === 0) 
 
     continue; 
 
    for(var j = i+1; j < data.length; j++) { 
 
     if(data[j].name === data[i].name) 
 
     return true; 
 
    } 
 
    } 
 
    return false; 
 
} 
 

 
alert(isDuplicateID()) 
 
alert(isDuplicateName())

+1

[相關問題](http://stackoverflow.com/questions/34740869/how-to-check-duplicates-in-array-except-0-javascript)(從OP) – A1rPun

回答

2

屬性可以通過使用obj.propNameobj[propName]來獲得。

var data = [{id: 0, name: "lina"}, {id: 1, name: "jona"}, {id: 2, name: "lina"}, {id: 0},{id: 3, name: "anna"}]; 
 
function isDuplicate(propName) { 
 
    for (var i = 0; i < data.length; i++) { 
 
     if (data[i][propName] === 0) 
 
      continue; 
 
     for (var j = i + 1; j < data.length; j++) { 
 
      if (data[j][propName] === data[i][propName]) 
 
       return true; 
 
     } 
 
    } 
 
    return false; 
 
} 
 

 
alert(isDuplicate("id")) 
 
alert(isDuplicate("name"))

2

您可以添加參數key並使用它。以下代碼描述相同

function isDuplicateID(key) {    
    for(var i = 0; i < data.length; i++) { 
    if(data[i][key] === 0) 
     continue; 
    for(var j = i+1; j < data.length; j++) { 
     if(data[j][key] === data[i][key]) 
     return true; 
    } 
    } 
    return false; 
} 
1

而不是使用。要訪問屬性,您可以在方括號中包含屬性名稱,即,而不是。您可以使用 []。

這意味着您可以傳遞屬性名稱,這是javascript的一個強大功能。

function isDuplicate(propertyName) {    
    for(var i = 0; i < data.length; i++) { 
    if(data[i][propertyName] === 0) 
     continue; 
    for(var j = i+1; j < data.length; j++) { 
     if(data[j][propertyName] === data[i][propertyName]) 
     return true; 
    } 
    } 
    return false; 
} 
0

參數傳遞給你的函數的屬性之間做出選擇:

function isDuplicate(field) {    
    for(var i = 0; i < data.length; i++) { 
    if(data[i][field] === 0) 
     continue; 
    for(var j = i+1; j < data.length; j++) { 
     if(data[j][field] === data[i][field]) 
     return true; 
    } 
    } 
    return false; 
} 

alert(isDuplicate('id')) 
alert(isDuplicate('name')) 
0

我會傾向於重寫功能,因此您只能使用indexOf在一個臨時檢查重複有一個循環陣列。

function hasDuplicate(type) { 
    for (var dupe = [], i = 0, l = data.length; i < l; i++) { 
    var val = data[i][type]; 
    if (dupe.indexOf(val) > -1) return true; 
    if (val !== 0) dupe.push(val); 
    } 
    return false; 
} 

hasDuplicate('id'); 

DEMO

相關問題