Working equivalent for method .some() in javascript or jquery?

For anyone else who comes to this thread, you can use some() on a jQuery object this way:

 $.makeArray($(...)).some(function(x) { ... })

jQuery.makeArray() converts the jQuery object into an Array, so you can use some() on it.


Array.prototype.some returns true or false, so you can do:

.some(function(el){
        return !isNaN(el.value);
}

You don't say where the error comes from, is it from the call to isNumber?

Edit

Ah, so your issue is with some.

If you want a jQuery some method, then it should at least mimic the built–in ECMAScript some, which takes two arguments: a callback function and an optional this argument.

The callback function should take three arguments: the value, the index (optional) and an optional value to use as the this argument. It should access the numeric members in ascending order and only visit members that actually exist.

So it should be something like (noting that jQuery.fn === jQuery.prototype):

jQuery.fn.some = function(fn, thisArg) {
  var result;

  for (var i=0, iLen = this.length; i<iLen; i++) {

    if (this.hasOwnProperty(i)) {

      if (typeof thisArg == 'undefined') {
        result = fn(this[i], i, this);

      } else {
        result = fn.call(thisArg, this[i], i, this);
      }

      if (result) return true;
    }  
  }
  return false;
}

So if you want now you can do:

var result = $('#goodsFilter')
              .find('input[type="number"]')
              .some(function(el) {
                 return isNumber(el.value); 
              })? 1 : 0; 

or you can do either of the following to coerce true to 1 and false to 0:

var result = Number($('#goodsFilter')
              .find('input[type="number"]')
              .some(function(el) {
                 return isNumber(el.value); 
              }));

or

var result = +($('#goodsFilter')
              .find('input[type="number"]')
              .some(function(el) {
                 return isNumber(el.value); 
              }));

The above is only lightly tested, the optional thisArg parameter might be redundant.


You could use the .filter method, and then check the length.

$('#goodsFilter')
    .find('input[type="number"]')
    .filter(function(i,el){ return isNumber($(el).val())); })
    .length > 0