1

如果我有一个用 10 个数字填充的 Javascript 数组。例如 (10,11,12,13,14,15,16,17,18,19) 我想取一个值为 20 的变量,并检查数组中是否有任何元素大于 20。因为我将比较许多用数字填充的数组,并且不知道它们包含哪些数字。

如何取 20,然后让 Javascript 测试数组中的每个数字,以确定它是否大于 20。

我知道你可以这样说:

var x = 20;
if (  x > myArray[0] && 
  x > myArray[1]     

等等等等,但这可能意味着输入一长串元素检查。有没有一种简单的方法,比如从起始索引 [0] 到 [10] 进行检查或其他什么?

4

6 回答 6

1

您可以使用.some()

if (myArray.some(function(x) {return x > 20;}))
    // do something

并非所有浏览器都支持它,但您可以轻松地对其进行填充。此外,库有这样的辅助函数,例如 Underscore 的any.

于 2012-10-18T11:08:11.407 回答
0

我喜欢用Object.prototype它来扩展 JavaScript 对象的基本功能。就像 JS 框架原型MooTools一样。

filter所以向JS -Object引入一个新功能Array不仅可以解决您的具体问题,而且还可以解决一整类问题。

// extending the Array type with the new function 'filter'
// so all arrays have access to this function
// argument `fn` is a test-function which returns true or false
Array.prototype.filter = function(fn) {
    var filtered = []; // a new array for the filtered items
    for(var i = 0, len = this.length; i < len; i++) {
        var item = this[i];
        // store this item if fn returns true
        if( fn(item) ) filtered.push(item); 
    }
    return filtered;
}

// want to filter this array   
var myArr = [1,2,3,4,5,6];

// find items in myArr > 3
var myArrGt3 = myArr.filter(
    // this is the test function / must always return a bool
    function(item) {
        return item > 3;
    }
);

// testing output
document.write(JSON.stringify(myArrGt3)); // prints "[4,5,6]"
于 2012-10-18T11:47:18.067 回答
0

尝试这个:

function getValuesFrom(array,x)
{
    x = +(x);//coerce to number
    array.sort(function(a,b)
    {
        return (a > b ? 1 : -1);
    });//sort in ascending order
    for (var i = 0;i<array.length;i++)
    {
        if (+array[i] >= x)
        {
            return array.slice(i);//return all elements >= x
        }
    }
}
var myArray = [10,11,12,13,14,15,16,17,18,19];
var larger = getValuesFrom(myArray,15);
console.log(larger);//[15,16,17,18,19]
console.log(larger.length);//5

那应该这样做。注意:将数组传递给此函数后,您可能会发现它的顺序发生了变化,以避免这种情况:

function getValuesFrom(array,x)
{
    x = +(x);//coerce to number
    var tmpArray = array.slice(0);//copy array
    tmpArray.sort(function(a,b)
    {
        return (a > b ? 1 : -1);
    });//sort in ascending order
    for (var i = 0;i<tmpArray.length;i++)
    {
        if (+tmpArray[i] >= x)
        {
            return tmpArray.slice(i);//return all elements >= x
        }
    }
}
于 2012-10-18T11:08:14.243 回答
0

使用 for 循环。

for (var i = 0; i < myArray.length; i++) {
    if (x > myArray[i]) {
         // whatever
    }
}
于 2012-10-18T11:01:22.237 回答
0
var x = 20;
var myArray = [10,11,12,13,14,15,16,17,18,19];
var cnt=0;

for(var i = 0; i < myArray.length; i++) {
 if(myArray[i]>x) {
   cnt++;
 }
}

alert("Found "+cnt+" values greater than "+x+" in the array" );
于 2012-10-18T11:03:07.417 回答
0

您可以使用 jQuery 使用 inArray 方法。

描述:在数组中搜索指定值并返回其索引(如果未找到则返回 -1)。

$.inArray( 5 + 5, [ 4, 5 , 7, 10 ] );  // output is 3

例子:

<script>
var arr = [ 4, "Pete", 8, "John" ];

jQuery.inArray( "John", arr ) // this returns 3(Index value of John)


</script>

同样在for 循环的帮助下,您还可以循环它们。

var array1=["fox","tiger","lion"];
var array2=["rat","cow","lion"];
for(i=0; i<array2.length; i++)
{
document.write(jQuery.inArray( array2[i], array1 ));
}

Output: -1 
        -1 
         2

再会!

于 2015-02-17T09:42:48.593 回答