知道二维数组下的值的位置

时间:2011-05-24 02:45:11

标签: javascript

我有一个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”)

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];

}