将对象对象作为数组的索引(Javascript)
我一直在使用来自此repo的纵横填字游戏应用:。问题是程序使用jquery版本1.6.2,而我的整个项目使用jquery-3.1.1版本。特别是,这里出现了错误:将对象对象作为数组的索引(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 -
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] + '"]');