如何在javascript中重用该函数

时间:2016-01-13 11:33:53

标签: 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())
&#13;
&#13;
&#13;

5 个答案:

答案 0 :(得分:2)

javascript中的属性可以通过obj.propNameobj[propName]来获取。

&#13;
&#13;
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"))
&#13;
&#13;
&#13;

答案 1 :(得分: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;
}

答案 2 :(得分: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;
}

答案 3 :(得分: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'))

答案 4 :(得分: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