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

时间:2014-09-20 18:01:07

标签: 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){
        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 );
        }

    });

});

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

2 个答案:

答案 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;
        ............