JavaScript-数组值为空

JavaScript-数组值为空,javascript,jquery,arrays,ajax,Javascript,Jquery,Arrays,Ajax,我有一个独特的挑战: 在URL1(随机wikipedia页面)上,向URL2(100个最常见的单词wikipedia页面)发出ajax请求,从返回的数据创建数组以供以后使用 我必须在“URL1”上从控制台运行此命令 例如: 导航到URL1 开放式控制台 粘贴代码 按回车键 到目前为止,我已经能够非常接近以下内容: $.ajax({ url: 'https://en.wikipedia.org/wiki/Most_common_words_in_English', type: '

我有一个独特的挑战: 在URL1(随机wikipedia页面)上,向URL2(100个最常见的单词wikipedia页面)发出ajax请求,从返回的数据创建数组以供以后使用

我必须在“URL1”上从控制台运行此命令 例如:

  • 导航到URL1
  • 开放式控制台
  • 粘贴代码
  • 按回车键
  • 到目前为止,我已经能够非常接近以下内容:

     $.ajax({
        url: 'https://en.wikipedia.org/wiki/Most_common_words_in_English',
        type: 'GET',
        dataType: 'html',
        success: function(data) { 
              Names = $.map($(data).find('.wikitable tr'), function() { 
    return $(this).find('td:last').text()});
    console.log(Names);
        }           
    });        
    
    但是我在数组中得到了空值

    在URL2(ajax请求中的链接)上,以下代码工作得非常完美

    var Names = $('.wikitable tr').map(function() { 
    return $(this).find('td:last').text() }).get(); console.log(Names);
    
    我使用这段代码时出错,因为.get,在删除它之后,我得到了一个包含适当数量元素的数组,但它们都是空的


    谢谢

    您的逻辑是正确的,只是使用了错误的函数。和是具有不同上下文和不同参数的不同函数

    如果使用正确的
    map
    功能,您的问题应该得到解决。改变

    success: function(data) { 
        Names = $.map($(data).find('.wikitable tr'), function() { 
            return $(this).find('td:last').text();
        });
        console.log(Names);
    }
    

    map
    的第二种形式中,将
    this
    关键字设置为DOM元素

    我还注意到,Wild code返回的是
    105
    文本,而不是表中的
    100
    单词,因为它也在选择表头。
    .map
    的另一个很酷的技巧是,如果返回
    null
    ,它将不会在结果中包含该值。因此,您可以

    Names = $(data).find('.wikitable tr').map(function() { 
        return $(this).find('td:last').text() || null;
    });
    
    由于空字符串的计算结果为
    false
    ,因此
    return
    将返回
    null
    ,而不是
    '
    。或者,您可以使选择器更具体,例如:

    Names = $(data).find('.wikitable tr td:odd').map(function() { 
        return $(this).text();
    });
    

    如果抛出任何错误,您也可以通过F12进行检查


    无法加载XMLHttpRequest。请求的资源上不存在“Access Control Allow Origin”标头。因此不允许访问源代码“null”。

    只需使用Js映射在Jquery对象(Html元素对象)上迭代即可

    JQuery映射只在基元数组上工作,不在对象上工作

    $.map($(data).find('.wikitable tr'), function() { 
            return $(this).find('td:last').text();
        });
    

    非常彻底,我看到了你的第一个答案并检查了它,回来回答它是正确的,我有一个关于空白标题条目的问题,只发现你已经编辑和回答。谈谈读心术吧!干杯,谢谢!他是从另一个维基百科页面下载的。因为它是同一个域,所以这不应该是一个问题。这是正确的Zequ,但是,如果我跨域运行它,会有多大的变化?@ZiNG据我所知,如果您只是在控制台中使用它,您可能无法做到这一点。你可以调查一下。
    $(data).find('.wikitable tr').map(function() { 
            return $(this).find('td:last').text();
    
    $.map($(data).find('.wikitable tr'), function() { 
            return $(this).find('td:last').text();
        });