3

Dose includes function complete loop throw each array item even if required item was in the beginning of array ?? can anyone explain that ?

$(document).ready(function () {
function search(array,requiredItem) {
   if(array.includes(requiredItem)){
       return true;
   }else{
       return false;
   }
}
search(['alaa','ali','ammar','omar','alia'],'alaa');
});
2
  • 3
    No, it stops searching as soon as it finds a match. Commented May 12, 2018 at 15:51
  • 2
    For further info on what 4castle states, you can find in step 7b of the spec where the loop exits as soon as a match is found: Reference Commented May 12, 2018 at 15:54

1 Answer 1

3

Array include in javascript stops as soon as the search element is found. It is using an algorythm called SameValueZero algorythm. Here is the code behind the function includes():

// https://tc39.github.io/ecma262/#sec-array.prototype.includes
if (!Array.prototype.includes) {
  Object.defineProperty(Array.prototype, 'includes', {
    value: function(searchElement, fromIndex) {

      if (this == null) {
        throw new TypeError('"this" is null or not defined');
      }

      // 1. Let O be ? ToObject(this value).
      var o = Object(this);

      // 2. Let len be ? ToLength(? Get(O, "length")).
      var len = o.length >>> 0;

      // 3. If len is 0, return false.
      if (len === 0) {
        return false;
      }

      // 4. Let n be ? ToInteger(fromIndex).
      //    (If fromIndex is undefined, this step produces the value 0.)
      var n = fromIndex | 0;

      // 5. If n ≥ 0, then
      //  a. Let k be n.
      // 6. Else n < 0,
      //  a. Let k be len + n.
      //  b. If k < 0, let k be 0.
      var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);

      function sameValueZero(x, y) {
        return x === y || (typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y));
      }

      // 7. Repeat, while k < len
      while (k < len) {
        // a. Let elementK be the result of ? Get(O, ! ToString(k)).
        // b. If SameValueZero(searchElement, elementK) is true, return true.
        if (sameValueZero(o[k], searchElement)) {
          return true;
        }
        // c. Increase k by 1. 
        k++;
      }

      // 8. Return false
      return false;
    }
  });
}
Sign up to request clarification or add additional context in comments.

2 Comments

This is the polyfill code, not the actual includes() code
whats the big O of include ?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.