如何使函数在javascript中可重用

How to make the function reusable in javascript

本文关键字:javascript 何使 函数      更新时间:2023-09-26

我有一个对象数组,属性是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())

您可以添加参数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中的属性可以使用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"))

而不是使用。要访问属性,可以将属性名称括在方括号中,即不要。你可以使用[]。

这意味着您可以传入属性名称,这是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');

演示