【发布时间】:2014-09-06 18:17:33
【问题描述】:
我有以下示例客户端对象:
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!');
}
}
是否有更有效的方法来执行此操作,因为对每个新位置的对象进行迭代似乎效率低下?
编辑:我的解决方案:
我决定将位置对象转换成一个字符串,然后评估每个传入的字符串:
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!
-
ajax 请求返回的确切格式是什么?
-
@dsuckau:实际上你可以比较数组和字符串,它甚至可以工作:
"5,5" == [5,5] // true。当然你是对的,这不是应该的。
标签: javascript arrays object evaluation