我有一个SummaryData数组,如图所示
var summaryData = [[0,100.34],[1,102.31],[2,131.08],[3,147.94],[4,172.55],[5,181.05],[6,180.08]];
我的问题是:
是否有可能找出值的位置是什么?
(例如,我怎么知道147.94在哪里?)(我期待“3”)
答案 0 :(得分:0)
function getPosition(candidate) {
var i = summaryData.length;
while (i) {
i -= 1;
if (summaryData[i][1] === candidate) {
return summaryData[i][0];
}
}
}
答案 1 :(得分:0)
<强>更新强>
更具原型性的方式:
var result = summaryData.detect(function(item) { return item[1] === 147.94; });
alert(result[0]);
或者:
function getKey(arr, value) {
var key = null,
item;
for (var i = 0; i < arr.length && !key; i++) {
item = arr[i];
if (item[1] === value) {
key = i;
}
}
return key;
}
用法:
var n = getKey(summaryData, 147.94); // returns 3.
答案 2 :(得分:0)
冒着为你做功课的风险......
var summaryData = [[0,100.34],[1,102.31],[2,131.08],[3,147.94],[4,172.55],[5,181.05],[6,180.08]];
function findPosition(value, dataArray) {
var a;
for (var i=0, iLen=dataArray.length; i<iLen; i++) {
a = dataArray[i];
for (var j=0, jLen=a.length; j<jLen; j++){
if (value == a[j]) {
return i + ',' + j;
}
}
}
}
alert(findPosition(131.08, summaryData)); // 2,1
以上返回第一场比赛的位置。
我现在看到你不需要迭代第二个数组,只需查看第二个值,所以:
function findPosition(value, dataArray) {
var a;
for (var i=0, iLen=dataArray.length; i<iLen; i++) {
a = dataArray[i];
if (value == a[1]) {
return a[0];
}
}
}
alert(findPosition(131.08, summaryData)); //2
或者,如果数据格式始终是指定的,并且可能有数千个值,则可能要快得多:
function findPosition(value, dataArray) {
var re = new RegExp('[^,],' + value);
var m = dataArray.join().match(re);
return m && m[0].replace(/,.*/,'');
// Or
// return m && m[0].split(',')[0];
}