javascript - 3 维数组 Javascript

标签 javascript html

我有一个 string,我正在使用 string.split(' '); 拆分它,以便将字符串转换为数组。

假设我有这两个表,table1table2

<table border="1" id="table1">
    <tr>
        <th colspan="2">Image One</th>
    </tr>
    <tr>
        <td style="width:40%;"><img src="airplane.jpg" alt="Image 1"></td>
        <td>
            <dl>
              <dt>airplane</dt>
              <dt>flight</dt>
              <dt>travel</dt>
              <dt>military</dt>
              <dt>word war</dt>
              <dt>GI</dt>
            </dl>
        </td>
    </tr>
</table>

<table border="1" id="table2">
    <tr>
        <th colspan="2">Image Two</th>
    </tr>
    <tr>
        <td style="width:40%;"><img src="apple.jpg" alt="Image 1"></td>
        <td>
            <dl id="tags">
              <dt>red</dt>
              <dt>apple</dt>
              <dt>round</dt>
              <dt>fruit</dt>
              <dt>healthy</dt>
              <dt>doctor</dt>
            </dl>
        </td>
    </tr>
</table>

现在出于测试目的,我在 table2dl 上有一个 tags 的 id。

我正在使用一个函数将那个 DL (#tags) 变成一个数组

function getArray(id) {
var node, list, arrValue;

    array = [];
    for (node = document.getElementById(id).firstChild;
        node;
        node = node.nextSibling) {
        if (node.nodeType == 1 && node.tagName == 'DT') {
            array.push(node.innerHTML);
        }
    }
    console.log(array)
}

为了根据我的原始 string 检查它以查看是否有任何值匹配。 但是,我将有多个 DTstring 将被检查。将所有表添加到一个 3d 数组中,然后根据 3d 数组检查 string 中的值是否正确?还是有更好的方法?

更新

问题是:

我最终会在表格中填满图像和标签。本质上,我希望能够根据我的字符串(将被分成一个数组)搜索这些标签,然后返回字符串中标签最多的图像。我试图找出最好的方法来做到这一点。 谢谢

最佳答案

我会使用 Object 来存储标签列表,而不是数组,其中键是标签,值是无关紧要的。

如果您使用 array.indexOf(),这将为您提供 O(1) 查找以检查该列表中是否存在其他一些字符串,而不是 O(n) 查找。

下面的函数将找到页面上的每个 DT,然后返回一个对象,该对象包含从每个 DT 的文本到其父 DL 的 ID 的映射。

function makeMap() {
    var map = {};
    var dls = document.getElementsByTagName('DL');
    for (var i = 0, n = dls.length; i < n; ++i) {
        var dl = dls[i];
        var id = dl.id;
        var node = dl.firstChild;
        while (node) {
            if (node.nodeType == 1 && node.tagName == 'DT') {
                var tag = node.textContent || node.innerText; // latter for MSIE
                map[tag] = id;
            }
            node = node.nextSibling;
        }
    }
    return map;
}

或者,在 jQuery 中(为了提高效率混合了一些纯 JS):

function makeMap2() {
    var map = {};
    var $dt = $('dl > dt');
    $dt.each(function() {
        var tag = this.textContent || this.innerText;
        map[tag] = this.parentNode.id;
    });
    return map;
}

关于javascript - 3 维数组 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13959714/

相关文章:

javascript - 如何将值存储在数组中并在 Chrome 扩展存储中的每个 session 中重用它?

javascript - 是否有像我的示例中那样的 do 方法的 jQuery 方法?

javascript - 在页面加载 Javascript 上调用函数

javascript - JS - 获取两个具有相同 id 的元素之间的正确元素

javascript - 如何避免从查询中读取行时超时(Phonegap + Javascript)

javascript - 调整大小事件不适用于绑定(bind)功能

javascript - 使滚动图标停止在 div 元素而不是使用 scrollTop

html - 包装 div 内的 div 未正确对齐

html - 浏览器鼠标按下(并按住)然后将光标对象拖出边界,对象边框变为蓝色,我该如何控制?

html - 如何修复div框右下角的显示图片