我有一个对象数组,属性是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;
答案 0 :(得分:2)
javascript中的属性可以通过obj.propName
或obj[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"))
&#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');