首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >映射jQuery对象数组不起作用?

映射jQuery对象数组不起作用?
EN

Stack Overflow用户
提问于 2016-04-13 03:50:49
回答 2查看 327关注 0票数 0
代码语言:javascript
运行
复制
<ul id="source">
  <li>北京空气质量:<b>90</b></li>
  <li>上海空气质量:<b>70</b></li>
  <li>天津空气质量:<b>80</b></li>
  <li>广州空气质量:<b>50</b></li>
  <li>深圳空气质量:<b>40</b></li>
  <li>福州空气质量:<b>32</b></li>
  <li>成都空气质量:<b>90</b></li>
</ul>

我的目标是从html文件中的<ul>...</ul>中检索信息。数据格式应该是:[["北京",90],["上海",70],.....],一个数组,第一个元素是来自中文文本的子字符串,第二个元素是数字。

我对此使用jQuery的想法是

代码语言:javascript
运行
复制
function getData() {
    /*
     coding here
     */
    var sourceData = $("#source").find("li");
    /*
     data = [
     ["北京", 90],
     ["北京", 90]
     ……
     ]
     */

    return sourceData.map(function (item) {
        return [$(item).text().substring(0,2),$(item).find("b").text()];
    });

它返回了["", "", "", "", "", "", "", "", "", "", "", "", "", ""]

所以我开始检查哪里出了问题。首先,我在没有jQuery的情况下尝试了这种方法

代码语言:javascript
运行
复制
function getData() {
var rowData = document.getElementById("source").getElementsByTagName("li");
var sourceData = [].slice.apply(rowData);
sourceData.map(function (item) {
        return [$(item).text().substring(0, 2), $(item).find("b").text()];
    });

而且起作用了。所以我开始测试

代码语言:javascript
运行
复制
var sourceData = $("#source").find("li");
sourceData.map(item => item);

回报是[0, 1, 2, 3, 4, 5, 6]。我想也许var sourceData = $("#source").find("li");的回归不是Array,但是

代码语言:javascript
运行
复制
> sourceData.__proto__
< []

我很困惑。有人能帮忙吗?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-13 04:23:16

根据jQuery文档http://api.jquery.com/map/,映射函数的回调与原生ES数组映射略有不同。回调参数的解释如下:

代码语言:javascript
运行
复制
Type: Function( Integer index, Element domElement ) => Object
A function object that will be invoked for each element in the current set

因此,将您的getData函数更改如下:

代码语言:javascript
运行
复制
return sourceData.map(function (index, item) {
    return [$(item).text().substring(0,2),$(item).find("b").text()];
});
票数 1
EN

Stack Overflow用户

发布于 2016-04-13 04:00:28

这个脚本似乎有效:

代码语言:javascript
运行
复制
function getData() {

    var sourceData = [];
    $("#source li").each(function (){
        var li_text = $(this).text();
        li_text = li_text.split(":");
        var sData   = [li_text[0].substring(0,2),li_text[1]];
        sourceData.push(sData);
    });
    return sourceData;

}

小提琴

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36588246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档