从多维数组中获取值

Get a value from a multidimensional array

我有一个多维数组如下:

var schMatrix = [
    ['Weight',100,200,300,400,500,600,700,800,900,1000,1100,1200,1300,1400,1500,1600,1700,1800,1900,2000],
    ['Rate',395,413,484,560,635,691,763,837,910,982,1082,1155,1231,1304,1379,1452,1527,1570,1676,1750],
    ];

在我的表单中,用户会输入一个权重。我想做的是,如果权重等于或低于数组的权重部分中的数字,则相应的比率被分配给一个变量。

我不知道如何做到这一点。任何朝着正确方向的推动都会受到赞赏。

最好使用地图。它们要快得多,您可以将每个权重映射到特定速率:

MAP = {
  100: 395,
  200: 413,
  300: 484,
  etc...
}

map.get(100) //outputs 395

要将数组映射到地图,请执行以下操作:

let map = new Map();
for(let i = 0; i < arr1.length; i++){
   map.set(arr1[i], arr2[i]);
}

首先,我建议您使用对象而不是二维数组:

let schMatrix = {
    "Weight": [...,...,...],
    "Rate": [...,...,...]
}

然后您可以遍历“权重”数组:

for (let i = 0; i < schMatrix["Weight"].length; i++) {
    if(schMatrix["Weight"][i] >= inputWeight){
        rate = schMatrix["Rate"][i]
    }
}
var schMatrix = [
 ['Weight', 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 
  1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000],
 ['Rate', 395, 413, 484, 560, 635, 691, 763, 837, 910, 982, 1082, 1155, 
  1231, 1304, 1379, 1452, 1527, 1570, 1676, 1750],
 ]

 function getRate(weight) {
   for (let i = 1; i < schMatrix[0].length; i++) {
     const currWeight = schMatrix[0][i]
     if (weight > currWeight) {
       // as soon as currWeight is bigger than weight, return
       return schMatrix[1][i-1]
     }
   }
 }

如果您假设权重已经排序,则此方法有效。

function getRate(matrix, target) {
  const [weights, rates] = matrix;
  for (let i = 1; i < weights.length; i++) {
    if (weights[i] > target) {
      return rates[i];
    }
  }
}

var schMatrix = [
  ['Weight',100,200],
  ['Rate',395,413],
];

const rate = getRate(schMatrix, 110);
console.log(rate); // 413

您可以通过 Array.prototype.find 方法查找相应的权重和比率列来执行此操作。之后检查“Weight”中的索引加一(因为标签是索引中的第一项)是否小于等于“Rate”中的对应项。这是代码:

const schMatrix = [
    ['Weight',100,200,300,400,500,600,700,800,900,1000,1100,1200,1300,1400,1500,1600,1700,1800,1900,2000],
 ['Rate',395,413,484,560,635,691,763,837,910,982,1082,1155,1231,1304,1379,1452,1527,1570,1676,1750],
];

function weightLessThanEqRate(i) {
    const weights = schMatrix.find((item) => item[0] === "Weight");
    const rates = schMatrix.find((item) => item[0] === "Rate");
    return weights[i + 1] <= rates[i + 1];
}

console.log(weightLessThanEqRate(5));

TypeScript Playground Link