Очевидный путь
Самый очевидный способ - использовать цикл 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);
Умный (эр) способ
В этом коде используется 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);
И это все. Гораздо быстрее, чем итерация по всему массиву. Особенно, когда в нем много предметов.