У меня есть следующий пример на стороне клиента объект:эффективно оценить, если объект JavaScript содержит строку
var obj = {
"locations": [
[
37.502917,
-122.501335
],
[
37.494473,
-122.499619
],
[
37.484394,
-122.455673
]
],
"types": [
[
"type1"
],
[
"type2"
],
[
"type3"
]
]
};
Местоположение может содержать до 50 значений. Запрос ajax возвращает набор новых местоположений, и мне нужно оценить, находятся ли они в пределах obj.locations. Каждое новое возвращается место является строкой, например:
var test = 37.502917 + ',' + -122.501335;
Для каждого места я могу перебирать текущими и проверить, если он присутствует:
for(var i = 0; i < obj.locations.length; i++) {
if(obj.locations[i] == test){
console.log('Found!');
}
}
Есть ли более эффективный способ сделать это как итерация через объект для каждого нового местоположения кажется неэффективной?
EDIT: Мое решение:
Я решил взять объект местоположения и повернуть на строку, а затем оценить каждый из входящих строк:
var test = -121.60183 + ',' + 38.025783;
var cords = [].concat([], obj.locations).toString();
if(cords.indexOf(test) !== -1) {
console.log('found! ');
}
В вашей итерации вы сравниваете массив со строкой. Но даже массивы, которые вы не могли просто сравнить с помощью «==»: [5, 5] == [5, 5] // false! – dsuckau
Каков точный формат, который вы получаете от запроса ajax? – dsuckau
@dsuckau: На самом деле вы * можете * сравнивать массивы со строками, и это может даже работать: '" 5,5 "== [5,5] // true'. Конечно, вы правы, это не то, как это должно быть сделано. – Bergi