我一直在使用此回购中的填字游戏应用:https://github.com/jweisbeck/Crossword。问题是该程序使用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();
}
错误与
一致light = $(puzzCells +'[data-coords="' + entries[x-1][i] + '"]');
浏览器显示此错误:
错误:语法错误,无法识别的表达式[object Object] [data-coords =&#34; 1,6&#34;]
我相信这与jQuery版本有关。或者程序可能使用[object Object]作为索引。不确定,因为我是jQuery的新手。我尝试使用jQuery Migrate,但它没有帮助。此外,我尝试使用jQuery 1.6.2,但是因为我使用的是Typescript并且必须通过.d.ts文件安装jQuery,所以Web浏览器根本找不到jQuery。任何提示或建议?提前致谢
答案 0 :(得分:1)
正如标题所说:
将对象Object作为数组的索引
使用标准对象/阵列是不可能的,但您可以使用Map:
let map = new Map(),
key = {id: '##'};
map.set(key, [1,2,3,4,5]);
console.log(map.get(key)); //[1,2,3,4,5]
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map
答案 1 :(得分:0)
错误中显示的字符串中的[object Object]
是因为jQuery对象被附加到字符串以创建选择器,该选择器无效。
在您的代码中,正是这一行导致了问题:
var puzzCells = $('#puzzle td') // holds jQuery object
// later on...
light = $(puzzCells + '[data-coords="' + entries[x-1][i] + '"]');
这与使用的jQuery版本无关,因为它是一个语法问题。
要解决此问题,您应该在filter()
对象上使用puzzCells
,而不是将其附加到选择器。试试这个:
light = puzzCells.filter('[data-coords="' + entries[x-1][i] + '"]');
答案 2 :(得分:0)
您正在连接对象(puzzCells
)和字符串。当JavaScript检测到字符串连接时,尝试在连接它们之前将所有变量转换为字符串。在纯JavaScript中,如果您执行WHATEVEROBJECT.toString()
,则会收到[object Object]
,这就是您看到包含该消息的错误的原因。
这不是jQuery版本问题,因为这发生在非常低级别(JavaScript)。
puzzCells
是一个jQuery对象,您可以在其中调用jQuery方法。在这种情况下,您需要过滤方法,如下所示:
light = puzzCells.filter('[data-coords="' + entries[x-1][i] + '"]');
点击此处查看更多信息:http://api.jquery.com/filter/