Ответ 1
Очевидный способ
Наиболее очевидным способом было бы использовать цикл for
и перебирать все элементы массива и сравнивать каждый раз, когда вы хотите узнать, есть ли у вас в нем определенный элемент. Тривиально, но утомительно, особенно когда у вас есть много сравнений.
function contains(items, obj) {
var itemKey = null;
var objKey = obj.firstName + ";" + obj.lastName;
var result = false;
for(var i = 0; !result && i < arr.length; i++)
{
itemKey = items[i].firstName + ";" + items[i].lastName;
result = itemKey === objKey;
}
return result;
};
Всякий раз, когда вы будете искать существующий объект:
contains(arr, newObj);
Умный (er) способ
Этот код использует возможность Javascript, чьи прототипы могут использоваться как массивы в некотором ассоциативном хранилище. Предположим, что у вас есть элементы JSON в переменной arr
. Определите свой ключ сравнения (укажите его имя и фамилию):
var arr = /* your JSON object */;
var hash = (function() {
var keys = {};
return {
contains: function(key) {
return keys[key] === true;
},
add: function(key) {
if (keys[key] !== true)
{
keys[key] = true;
}
}
};
})();
var key = null;
for (var i = 0; i < arr.length; i++)
{
key = arr[i].firstName + ";" + arr[i].lastName;
if (!hash.contains(key))
{
hash.add(key);
}
}
Узнать, есть ли у вас элемент в вашем массиве, довольно просто:
hash.contains(key);
И что это. Гораздо быстрее, чем итерация по всему массиву. Особенно, когда у него много предметов.