从多维数组中获取值
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));
我有一个多维数组如下:
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));