Один и тот же массив разные результаты - PullRequest
1 голос
/ 02 апреля 2019

Функция closest в тегах скрипта находит число, ближайшее к 112. Однако, когда я использую эту же функцию для идентичного массива из запроса ajax, это дает неверный результат.

Журнал консоли 1 : локальный array дает правильный результат 122.

Журнал консоли 2 : Внешний array2 показан идентичным локальному.

Журнал консоли 3 : использование внешнего массива приводит к левой скобке. Снятие скобок с gist приводит к 8, что по-прежнему неверно.

JSFiddle

function loadgist(gistid, filename)
{
    $.ajax({
        url: 'https://api.github.com/gists/' + gistid,
        type: 'GET',
        dataType: 'jsonp'
    }).success(function(gistdata) {
        var content = gistdata.data.files[filename].content;
        DoSomethingWith(content)
    }).error(function(e) {
        // ajax error
    });        
}

function DoSomethingWith(content)
{
    number = 112;
    var array2 = (content);
    console.log(content);
    console.log(closest(number, array2));
}

loadgist("9544dfd755418e819810312488e7986c", "gistfile1.txt");
<script src=https://code.jquery.com/jquery-1.9.1.js></script>
<script language="javascript">

function closest(num, arr)
{
    var curr = arr[0];
    var diff = Math.abs (num - curr);

    for (var val = 0; val < arr.length; val++)
    {
        var newdiff = Math.abs (num - arr[val]);

        if (newdiff < diff)
        {
            diff = newdiff;
            curr = arr[val];
        }
    }

    return curr;
}

array = [2, 42, 82, 122, 162, 202, 242, 282, 322, 362];
number = 112;
console.log(closest (number, array));

</script>

1 Ответ

4 голосов
/ 02 апреля 2019

Если вы добавите console.log(typeof content) в метод DoSomethingWith(...), вы заметите, что это не array, а string. Поэтому используйте JSON.parse () , чтобы получить array из string, например:

function DoSomethingWith(content)
{
    let number = 112;
    let array2 = JSON.parse(content);
    console.log(content);
    console.log(closest(number, array2));
}
...