Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将对象对象作为数组的索引(Javascript)_Javascript_Jquery_Typescript - Fatal编程技术网

将对象对象作为数组的索引(Javascript)

将对象对象作为数组的索引(Javascript),javascript,jquery,typescript,Javascript,Jquery,Typescript,我一直在使用来自此repo的纵横填字游戏应用:。问题是程序使用jquery版本1.6.2,而我的整个项目使用jquery-3.1.1版本。特别是,这里出现了错误: buildEntries: function() { var puzzCells = $('#puzzle td'), light, $groupedLights, hasOffset = false, positionOffset = entryCount -

我一直在使用来自此repo的纵横填字游戏应用:。问题是程序使用jquery版本1.6.2,而我的整个项目使用jquery-3.1.1版本。特别是,这里出现了错误:

buildEntries: function() {
    var puzzCells = $('#puzzle td'),
        light,
        $groupedLights,
        hasOffset = false,
        positionOffset = entryCount - puzz.data[puzz.data.length-1].position; // diff. between total ENTRIES and highest POSITIONS

    for (var x=1, p = entryCount; x <= p; ++x) {
        var letters = puzz.data[x-1].answer.split('');

        for (var i=0; i < entries[x-1].length; ++i) {

            light = $(puzzCells +'[data-coords="' + entries[x-1][i] + '"]');

            if($(light).empty()){
                console.log($(light));
                $(light)
                    .addClass('entry-' + (x-1) + ' position-' + (x-1) )
                    .append('<input maxlength="1" val="" type="text" tabindex="-1" />');
            }
        }
    }

    // Put entry number in first 'light' of each entry, skipping it if already present
    console.log(entries);
    console.log(puzz.data);
    for (var i = 0; i < entryCount; i++) {
        $groupedLights = $('.entry-' + i); 
        if(!$('.entry-' + i +':eq(0) span').length){
            $groupedLights.eq(0)
                .append('<span>' + puzz.data[i].position + '</span>');
        }
    }

    util.highlightEntry();
    util.highlightClue();
    $('.active').eq(0).focus();
    $('.active').eq(0).select();            
}
浏览器显示此错误:

错误:语法错误,无法识别的表达式[object object][data coords=1,6]

我相信这与jQuery版本有关。或者程序使用[object]作为索引。不确定,因为我是jQuery新手。我尝试使用jQuery迁移,但没有帮助。另外,我尝试使用jQuery1.6.2,但是web浏览器根本找不到jQuery,因为我使用的是Typescript,必须通过.d.ts文件安装jQuery。有什么建议吗?提前感谢

错误中显示的字符串中的[object object]是因为将jQuery对象附加到字符串以创建选择器,这是无效的

在代码中,是这一行导致了问题:

var puzzCells = $('#puzzle td') // holds jQuery object

// later on...
light = $(puzzCells + '[data-coords="' + entries[x-1][i] + '"]');
这与使用的jQuery版本无关,因为这是一个语法问题

要解决此问题,您应该在puzzCells对象上使用过滤器,而不是将其附加到选择器。试试这个:

light = puzzCells.filter('[data-coords="' + entries[x-1][i] + '"]');
正如标题所说:

将对象设为数组的索引

对于标准对象/阵列,这是不可能的,但您可以使用贴图:

let map = new Map(),
    key = {id: '##'};

map.set(key, [1,2,3,4,5]);

console.log(map.get(key)); //[1,2,3,4,5]

您正在连接一个对象puzzCells和一个字符串。当JavaScript检测到字符串连接时,会尝试在连接之前将所有变量转换为字符串。在普通JavaScript中,如果您执行verobject.toString,您将收到[object object],这就是为什么您会看到包含该消息的错误

这不是jQuery版本问题,因为这发生在非常低级的JavaScript上

puzzCells是一个jQuery对象,您可以在其中调用jQuery方法。在这种情况下,您需要filter方法,如下所示:

light = puzzCells.filter('[data-coords="' + entries[x-1][i] + '"]');

查看此处的更多信息:

我不知道这与所问问题有什么关系?首先,标题毫无意义。其次,如果你读了这个问题,这与实际情况完全无关problem@RoryMcCrossan是的,在描述中,我说可能问题与[object object]是数组的索引(也称为标题)无关。但是谢谢你的帮助和解释!谢谢工作得很有魅力!知道字符串连接的所有内容,但仍然不理解为什么同一代码适用于jquery-1.6.2版本,而不适用于其他jquery版本。@AkhmediyarSailaubekov,因为[object object][whatever]是jquery 1.6.2中的有效选择器,但实际上不选择任何内容。选择器的长度将为零。较新的版本有更好的语法检查,以避免像这样的问题,即选择某些东西,但实际上没有。
light = puzzCells.filter('[data-coords="' + entries[x-1][i] + '"]');