用javascript

时间:2018-07-09 10:29:05

标签: javascript arrays

几天来,我一直对此表示怀疑,找不到解决办法。

我有一个如下所示的数组。

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

关于我在做什么的任何指针吗?

非常感谢,

理查德

1 个答案:

答案 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);