使用JavaScript中的对象的哈希表功能

时间:2013-11-05 14:08:54

标签: javascript jquery hashtable

好的,我有以下场景:我得到一个对象,这是一个包含列表的数组。数组中总有3个项目。

列表中的项目有一个我感兴趣的特定字段(ISBN13)。

我想使用JavaScript构建一个这样的表:

<table>
    <tr>
        <td>Array_1_Item_1_ISBN13</td>
        <td>Array_2_Item_1_ISBN13</td>
        <td>Array_3_Item_1_ISBN13</td>
    </tr>
    <tr>
        <td>Array_1_Item_2_ISBN13</td>
        <td>Array_2_Item_2_ISBN13</td>
        <td>Array_3_Item_2_ISBN13</td>
    </tr>
</table>

在C#中,我只会构建一个字典,并且:

  • 如果我之前看过该密钥,请添加新密钥
  • 如果我之前看过该密钥,请继续构建字符串

但现在我在jQuery / JS的土地上,嗯。

下面,我尝试创建一个对象,我用来填充数据。这段代码有以下几个问题:

  • 不是在密钥isbn13处向对象添加条目,而是添加了object.isbn = ...
  • 不确定if()语句是否有效

    function setBookTableFromProducts(data) {
    var outputArray = {};
    
    // list is an array of books, e-books and audiobooks)
    $.each($.parseJSON(data), function (index, value) {
        // single type of book
        $.each(value, function (index_inner, book) {
            var isbn13 = book.ISBN13;
            if (outputArray.isbn13 == null) {
                var newRowStr = '<tr>';
                newRowStr += '<td>' + book.ISBN13 + '</td>';
                outputArray.isbn13 = newRowStr;
            } else {
                outputArray.isbn13 += '<td>' +book.ISBN13+ '</td>';
            }
    
        });
    });
    
    $.each(outputArray, function (index, trArr) {
        trArr += '</tr>';
        $('#bookTable').append(trArr);
    });
    

    }

您如何解决这个问题?我的代码出了什么问题? (哦,表现并不重要)

1 个答案:

答案 0 :(得分:2)

如果您提供了输入的示例(即$ .parseJSON(数据))或者可能创建了jsFiddle,那将会有所帮助。

但一个可能的问题是outputArray.isbn13。您var isbn13 = book.ISBN13获取一些ISBN值(比如9783161484100),然后期望将其用作outputArray对象outputArray.isbn13的关键字。但是,密钥为isbn13而不是outputArray.9783161484100。相反,尝试

var isbn13 = book.ISBN13;
if (outputArray[isbn13] == null) {
  ...
}

然后将其解释为outputArray.9783161484100