【发布时间】:2019-08-04 08:51:01
【问题描述】:
尝试在这个问题中给出一个替代方案,不要循环!只需使用 indexOf 和一些整数数学
Get coordinates of an element in multidimentional array in Javascript
下面的代码看起来很有希望,但失败了。
有更好的数学技能的人想要解决它吗?
var letterVariations = [
[' ','0','1','2','3','4','5','6','7','8','9'],
['A','a','B','b','C','c','D','d','E','e',';'],
['Â','â','F','f','G','g','H','h','Ê','ê',':'],
['À','à','I','i','J','j','K','k','È','è','.'],
['L','l','Î','î','M','m','N','n','É','é','?'],
['O','o','Ï','ï','P','p','Q','q','R','r','!'],
['Ô','ô','S','s','T','t','U','u','V','v','“'],
['W','w','X','x','Y','y','Ù','ù','Z','z','”'],
['@','&','#','[','(','/',')',']','+','=','-'],
];
var string = JSON.stringify(letterVariations);
var pos = string.indexOf("u")
console.log(Math.floor((pos/10)%8),pos%10)
// fails, how to fix?
pos = string.indexOf("M")
console.log(Math.floor((pos/10)%8),pos%10)
【问题讨论】:
-
你想用“
% 8”做什么? -
JSON.strinigfy 给你
[[" ","0","1","2","3","4","5","6","7","8","9"],["A","a","B","b","C","c","D","d","E","e",";"]...这样的字符串,你不能在这里搜索,最好使用letterVariations.toString() -
嗯,这是一个 11 x 9 的网格,而不是 10 x 8。
-
对于
x的位置,我想你可以尝试将值与字符串的长度成比例。示例:u的索引为 307,使用:Math.floor((pos*11)/string.length)您可以获得x位置,在这种情况下为 8。它是 11,因为它是 11x9 网格。不过,我不确定如何获得 Y 值。 -
@AlexOwl 介意解释为什么? JSON.stringify 不会随意添加内容,并且由于数组中每个项目的长度始终相同,因此您应该能够取回信息。此外,我认为最初的问题是通过保持当前编写的逻辑来修复他提供的代码。
标签: javascript arrays stringify