几天来,我一直对此表示怀疑,找不到解决办法。
我有一个如下所示的数组。
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]。
关于我在做什么的任何指针吗?
非常感谢,
理查德
答案 0 :(得分:2)
所以我需要按第二个元素进行排序,然后获得第一个元素的排名。
是的,但是,在您的代码中:
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);