簡體   English   中英

如何使函數在JavaScript中可重用

[英]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.propNameobj[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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM