我有一个Ajax请求,它返回类型为number的lat / lon坐标。
对于每个响应,我需要检查每个返回的值是否在数组中,如果没有添加它。这是我到目前为止所拥有的:
$.each(jqXHR.responseJSON, function (index, value) {
if($.inArray([value.loc.coordinates[1],value.loc.coordinates[0]], settings.locations) === -1){
console.log('adding...');
settings.locations.push([value.loc.coordinates[1], value.loc.coordinates[0]]);
} else {
console.log('already have...');
}
});
测试表明比较总是失败,即使它已经在seettings.locations中,也会添加该值。任何人都可以建议哪里有问题?
更新:好的,所以感谢到目前为止的评论我可以看到这是错误的使用inArray。继承人我现在所拥有的:
$.each(jqXHR.responseJSON, function (index, value) {
$.each( settings.locations, function( key, cValue ) {
if(value.loc.coordinates[1]+','+value.loc.coordinates[0] !== cValue){
console.log('Adding new coords..')
settings.locations.push([value.loc.coordinates[1], value.loc.coordinates[0]]);
} else {
console.log('Already have: ' +cValue );
}
});
});
同样,这些永远不会评估匹配,因此它会进入无限循环。
答案 0 :(得分:0)
请注意您使用$ .inArray的方式。它一次只检查一个值。
$.inArray(1, [1, 2]);
// output: 0 -> exists at index 0
$.inArray(2, [1, 2]);
// output: 1 -> exists at index 1
$.inArray([1, 2], [1, 2]);
// output: -1
实际上第一个参数不能是数组。 或者你可以这样做:
$.each(jqXHR.responseJSON, function (index, value) {
if ($.inArray(value.loc.coordinates[1], settings.locations) !== -1) {
if ($.inArray(value.loc.coordinates[0], settings.locations) !== -1) {
return;
}
return;
}
settings.locations.push([value.loc.coordinates[1], value.loc.coordinates[0]]);
});
答案 1 :(得分:0)
我的解决方案。我决定将存储数据的格式更改为对象:
"37.502917,-122.501335" : true,
"37.494473,-122.499619" : true,
然后我可以轻松检查是否存在:
$.each(jqXHR.responseJSON, function (index, value) {
var newLocation = value.loc.coordinates[1] + ',' + value.loc.coordinates[0];
if (currentData[newLocation] === undefined) {
currentData[newLocation] = currentData[newLocation] || true;
............