JavaScript中最好的方法是遍历对象数组并检查数组对象的某个属性中是否已存在某个值? 例如:我有以下对象数组: [{名: “TEAM1”,成员:3},{名称: “bestteam”,成员:4}] 现在我想添加一个新对象,但我想在添加它之前检查数组中是否存在此对象属性“name”
答案 0 :(得分:3)
试试这个
function checkIfNameExists(arr, newName) {
return arr.some(function(e) {
return e.name === newName;
});
}
其中arr是你的数组,newName是要检查的名称。
您也可以通过将属性作为参数进行比较来减少临时性,如此
function checkIfNameExists(arr, prop, newVal) {
return arr.some(function(e) {
return e[prop] ? e[prop] === newVal : false;
});
}
答案 1 :(得分:1)
您可以使用简单的循环。这是一个函数,可以帮助您找出键值是否在数组中。
function keyExist(value, array) {
for(var i in array) {
for(var k in array[i])
if(array[i][k] === value) {
console.log(value + ' is in array!');
return true;
}
}
return false;
}
至于你的例子,你可以改变第二个循环
for(var k in array[i])
if(k === value) { return true; }
到
if(array[i].name === value) { return true; }
答案 2 :(得分:1)
假设你说一个对象等于一个对象,当且仅当它们具有与每个元素完全相同的元素和值时:
var map = {};
for (var i = 0; i < arr.length; i++) {
var index = JSON.stringify(arr[i]);
if (!map[index]) {
map[index] = 1;
} else {
map[index]++;
}
}
for (var key in map) {
if (map[key] > 1) {
console.log ('duplicate found for:');
console.log (JSON.parse (key));
}
}
简单地定义一个数组&#34; arr&#34;用一些物品检查出来
答案 3 :(得分:1)
您可以迭代数组并迭代数组的键,并检查某些属性是否具有所需的值。
var data = [{ prop1: 'one', prop2: 'two' }, { prop3: 'three', prop4: 'four' }];
function find(v, data) {
data.forEach(function (a, i) {
Object.keys(a).forEach(function (k) {
if (a[k] === v) {
document.write(v + ' found in [' + i + '].' + k);
}
});
});
}
find('three', data);
&#13;
答案 4 :(得分:0)
我没有时间回复,但是从我之前的代码中可能有些人会优化它...
function JSONRemoveDuplicates(JSONDATA) {
var uniqueNames = [];
$.each(JSONDATA, function (i, el) {
if (!existInJSON(uniqueNames, el) > 0) { uniqueNames.push(el); }
});
return uniqueNames;
}
function existInJSON(jsondata, el) {
var ret = 0;
$(jsondata).each(function (index, data) {
if (data.id == el.id)
ret++;
})
return ret > 0;
}