javascript - 在javascript中对多维数组进行排名
问题描述
几天来我一直在努力解决这个问题,但找不到解决方案。
我有一个如下所示的数组。
var myArr = [
[1, 10],
[0, 9],
[0, 8],
[0, 11],
[0, 12]
];
数据是待售商品的列表,第一个元素是 0,如果不是我的,1 代表我的商品,第二个元素是价格。
从这里我需要返回一个 1 与其他元素的排名 [3/5] 所以我需要按第二个元素对其进行排序,然后得到第一个元素的排名。
我一直在尝试使用此代码对其进行排序
myArr.sort(function (a, b) {
return a[0] - b[0];
});
然后这个找到排名
function getIndexOfK(arr, k) {
for (var i = 0; i < arr.length; i++) {
var index = arr[i].indexOf(k);
if (index > -1) {
return [i, index];
}
}
}
var needle = 1;
var result = getIndexOfK(competitorsArr, needle);
console.log('The value #' + needle + ' is located at array[' + result[0] + '][' + result[1] + '].');
但它每次都返回这个?
值 #1 位于数组 [0] [0] 中。
关于我做错了什么的任何指示?
非常感谢,
理查德
解决方案
所以我需要按第二个元素对其进行排序,然后得到第一个元素的排名。
是的,但是,在您的代码中:
myArr.sort(function (a, b) {
return a[0] - b[0];
});
您按第一个元素排序,而不是第二个。修复它,它工作正常:
var myArr = [
[1, 10],
[0, 9],
[0, 8],
[0, 11],
[0, 12]
];
myArr.sort(function(a, b) {
return a[1] - b[1];
});
function getIndexOfK(arr, k) {
for (var i = 0; i < arr.length; i++) {
var index = arr[i].indexOf(k);
if (index > -1) {
return [i, index];
}
}
}
console.log(getIndexOfK(myArr, 1));
您可以通过识别商品的价格来降低时间复杂度,然后遍历数组并检查有多少商品更便宜O(N)
,不需要排序:
var myArr = [
[1, 10],
[0, 9],
[0, 8],
[0, 11],
[0, 12]
];
const myPrice = myArr.find(([owner]) => owner === 1)[1];
const numCheaperThanMine = myArr.reduce(
(a, [owner, price]) => (
price < myPrice && owner !== 1
? ++a
: a
),
0
);
console.log(numCheaperThanMine);
推荐阅读
- java - Gradle 同步失败:找不到 com.android.tools.build:gradle:4.0.1
- python-3.x - 使用shogun在python中实现多任务多核学习
- python - 如何在 Tkinter 中重置/延迟 .after?
- python - 页面加载时仪表板选项卡未展开
- r - R:ggdotplot 问题:如何更改颜色
- reactjs - 在 react 中使用 preventDefault 和自定义钩子
- python - 旋转具有重复索引值的 pandas 数据框
- acumatica - 使用 Acumatica SOAP 创建账单会导致错误“System.ArgumentNullException: Value cannot be null”
- css - 如何在不更改元素结构的情况下从应用于父元素的 svg 过滤器中排除子元素?
- python - Pandas 最后四个非 nan 值的总和