JavaScript JQuery-两个数组之间的隐式比较

JavaScript JQuery-两个数组之间的隐式比较,javascript,jquery,arrays,comparison,Javascript,Jquery,Arrays,Comparison,我有一个Ajax请求,返回类型为number的lat/lon坐标 对于每个响应,我需要检查每个返回值是否在一个数组中,如果不在,则添加它。以下是我到目前为止的情况: $.each(jqXHR.responseJSON, function (index, value) { if($.inArray([value.loc.coordinates[1],value.loc.coordinates[0]], settings.locations) === -1){ consol

我有一个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 );
        }

    });

});

同样,这些值永远不会匹配,因此它会进入一个无限循环。

请注意如何使用$.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]]);
});

我的解决方案。我决定将存储数据的格式更改为对象:

"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;
        ............

不能使用$.inArray同时查找两个坐标。这根本不起作用。它只查找必须匹配整个数组元素才能找到的单个项。您需要编写自己的循环来搜索数组。OP的数据略有不同,应该是[[1,2],[3,4],[5,6],…],作为第二个参数传递,第一个参数当然是[1,2]或其他参数。他想要在两个数组之间进行某种隐含的比较。我想你误解了OP的数据。请看我上面的评论。他的settings.locations实际上是一个数组的数组。每个位置都是一个数组。我知道,但是$.inArray不是比较数组的合适方法。因为它不接受数组作为第一个参数。这就是为什么要更改存储位置的数据,例如使用对象而不是数组。或者简单地使用for循环来检查是否存在。