![](/img/trans.png)
[英]How do I take javascript identical functions and make then into a reusable function?
[英]How to make the function reusable in javascript
我有一個對象數組,屬性是id和name。 現在,我有一個函數可以檢查id和name的重復值。 我的問題是我使該功能變得多余。 我只想使用一次代碼使其可重用。
唯一的區別是屬性名稱。 有什么解決方案只能使用一次功能嗎? 謝謝
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())
可以使用obj.propName
或obj[propName]
來獲取javascript中的屬性。
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"))
您可以添加參數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;
}
而不是使用。 要訪問屬性,可以將屬性名稱括在方括號中,而不是。 您可以使用 []。
這意味着您可以隨后傳入屬性名稱,這是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;
}
將參數傳遞給函數以在屬性之間進行選擇:
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'))
我傾向於重寫該函數,因此您只有一個循環使用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');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.