我有一个javascript中的数据列表,如下所示:
[[152, 48, 'http://www.google.com'],
[198, 47, 'http://www.stackoverflow.com'],
[199, 45, 'http://www.apple.com']]
Run Code Online (Sandbox Code Playgroud)
我正在使用flot来创建一个情节,并且我试图传递第三个值以从该点访问超链接.因此,我试图通过使用前两个作为查找键来查找每个列表的第三个值(即[[x,y,hyperlink],[x2,y2,hyperlink2]],单击一个点,然后使用相应(x,y)的查找相应的超链接)
无论如何要做到这一点,还是我需要将x和y的一些字典传递给javascript,然后从查找的两个列表中找到公共变量?在python中,我知道你可以x使用itemgetter 对值进行列表过滤,然后查找与该y值对应的链接.但我对js几乎一无所知,因此可以(x,y)给出ID-ing的解决方案,或者如果不可能或建议,则可以采用两个(来自x和y值)列表并找到一个共同值(如果是多个)的解决方案,只有一个,任何人)?
您可以使用Array .filter()方法来确定是否有任何元素与提供的x和y匹配.(注意IE .filter()直到版本9 才支持,但是MDN有一个可以包含的垫片).
var data = [[152, 48, 'http://www.google.com'],
[198, 47, 'http://www.stackoverflow.com'],
[199, 45, 'http://www.apple.com']];
function getURLForPoint1(x, y) {
var p = data.filter(function(el) {
return (el[0] === x && el[1] === y);
});
if (p.length === 1) return p[0][2];
// else 0 or more than 1 elements mathced so return undefined
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以预先创建字典对象,然后从字典中进行将来的查找:
var getURLForPoint2 = function() {
var dataDictionary = {}, i;
for (i = 0; i < data.length; i++)
dataDictionary[data[i][0]+" "+data[i][1]] = data[i][2];
return function(x, y) {
return dataDictionary[x + " " + y];
};
}();
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,我都编码它,以便如果你要求一个不在列表中的点你会undefined回来,但显然你可以改变它以返回一个空字符串或抛出异常或任何你喜欢的.
alert(getURLForPoint1(198, 47)); // 'http://www.stackoverflow.com'
alert(getURLForPoint2(198, 47)); // 'http://www.stackoverflow.com'
alert(getURLForPoint2(4, 5)); // undefined
Run Code Online (Sandbox Code Playgroud)
两者的演示:http://jsfiddle.net/WdSAz/
| 归档时间: |
|
| 查看次数: |
10733 次 |
| 最近记录: |