我有一个整数数组。如果我要将数据插入到数组中,那么如何根据数组确定值的索引,以便在它之前没有值更大。
例:
let value = 3941;
calcOrder(value);
calcOrder(value) {
let array = [3002,2934, 1044, 2848, 1293, 9342, etc..]
// some logic
}
}
结果:根据这个例子,我的函数应该返回5(因为3941 <9342但比数组中的其他值多)。
你可以使用.filter()
数组方法:
let value = 3941,
array = [3002,2934, 1044, 2848, 1293, 9342];
let result = array.filter(v => v < value).length;
console.log(result);
您可以编写一个循环来检查逻辑并使用长度计算数字
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);
您可以使用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;
}
如果数字小于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));
对于不需要创建中间数组的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));
它可以是“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