JS数组查找值的索引

问题描述 投票:0回答:6

我有一个整数数组。如果我要将数据插入到数组中,那么如何根据数组确定值的索引,以便在它之前没有值更大。

例:

let value = 3941;

calcOrder(value);

calcOrder(value) {
    let array = [3002,2934, 1044, 2848, 1293, 9342, etc..]
        // some logic
    }
}

结果:根据这个例子,我的函数应该返回5(因为3941 <9342但比数组中的其他值多)。

javascript arrays
6个回答
3
投票

你可以使用.filter()数组方法:

let value = 3941,
    array = [3002,2934, 1044, 2848, 1293, 9342];
    
let result = array.filter(v => v < value).length;

console.log(result);

2
投票

您可以编写一个循环来检查逻辑并使用长度计算数字

DEMO

function countOthers(value) {
  return function(element, index, array) {
    return (element < value);
  }
}
var filtered = [3002,2934, 1044, 2848, 1293, 9342].filter(countOthers(3941)).length;
console.log(filtered);

1
投票

您可以使用filter()来获取小于该值的所有元素的数组。最后取数组的长度:

let value = 3941;

console.log(calcOrder(value));

function calcOrder(value) {
    let array = [3002,2934, 1044, 2848, 1293, 9342]
    return array.filter(i => i<value).length;
}

1
投票

如果数字小于Array.forEach(),你可以使用count遍历数组并增加value值:

let value = 3941;
function calcOrder(value) {
  let array = [3002, 2934, 1044, 2848, 1293, 9342]
  let count = 0;
  array.forEach((item) => {
    if (item < value) {
      count++;
    }
  });
  return count;
}

console.log(calcOrder(value));

您可以使用旧方法获得该结果,而无需使用数组函数使其在IE浏览器和旧版Web浏览器中工作:

let value = 3941;
function calcOrder(value) {
  let array = [3002, 2934, 1044, 2848, 1293, 9342]
  let count = 0;
  array.forEach(function(item){
    if (item < value) {
      count++;
    }
  });
  return count;
}

console.log(calcOrder(value));

1
投票

对于不需要创建中间数组的O(n)解决方案,请使用reduce:从0开始,当您迭代的项目小于您要查找其位置的值时,向累加器添加一个:

const array = [3002,2934, 1044, 2848, 1293, 9342];

const calcOrder = value => array.reduce((a, num) => num < value ? a + 1 : a, 0);
console.log(calcOrder(3941));

0
投票

它可以是“sort”和“findIndex”逻辑。

var array = [3002,2934, 1044, 2848, 1293, 9342]


var calOrder = (num) => ((index = array.sort().findIndex(val => val > num)), index == -1 ? array.length : index)

calOrder(3941) // 5
© www.soinside.com 2019 - 2024. All rights reserved.