mozilla

Compare Revisions

Array.prototype.lastIndexOf()

Change Revisions

Revision 29158:

Revision 29158 by Waldo on

Revision 29159:

Revision 29159 by Waldo on

Title:
Array lastIndexOf method
Array lastIndexOf method
Slug:
JavaScript/Reference/Global_Objects/Array/lastIndexOf
JavaScript/Reference/Global_Objects/Array/lastIndexOf
Content:

Revision 29158
Revision 29159
n41    <p>n41    <pre class="eval">
42      <code>lastIndexOf(<i>searchElement</i>{{mediawiki.external(42var index = <i>array</i>.lastIndexOf(<i>searchElement</i>[, <i>fr
>', &lt;i&gt;fromIndex&lt;/i&gt;')}})<br></code>>omIndex</i>]);
43    </p>43</pre>
nn67    <h3 name="Compatibility">
68      Compatibility
69    </h3>
70    <p>
71      <code>lastIndexOf</code> is a JavaScript extension to the E
 >CMA-262 standard; as such it may not be present in other implemen
 >tations of the standard. You can work around this by inserting th
 >e following code at the beginning of your scripts, allowing use o
 >f <code>lastIndexOf</code> in ECMA-262 implementations which do n
 >ot natively support it.
72    </p>
73    <pre class="eval">
74if (!Array.prototype.lastIndexOf)
75{
76  Array.prototype.lastIndexOf = function(elt /*, from*/)
77  {
78    var len = this.length;
79 
80    var from = Number(arguments[1]);
81    if (isNaN(from))
82    {
83      from = len - 1;
84    }
85    else
86    {
87      from = (from &lt; 0)
88           ? Math.ceil(from)
89           : Math.floor(from);
90      if (from &lt; 0)
91        from += len;
92      else if (from &gt;= len)
93        from = len - 1;
94    }
95 
96    for (; from &gt; -1; from--)
97    {
98      if (from in this &amp;&amp;
99          this[from] === elt)
100        return from;
101    }
102    return -1;
103  };
104}
105</pre>
106    <p>
107      Note that this implementation aims for absolute compatibili
 >ty with <code>lastIndexOf</code> in Firefox and the SpiderMonkey 
 >JavaScript engine, including in several cases which are arguably 
 >edge cases. If you intend to use this in real-world applications,
 > you may be able to calculate <code>from</code> with less complic
 >ated code if you ignore those cases.
108    </p>
n76    <pre>n118    <pre class="eval">
77array = [2, 5, 9, 2];119var array = [2, 5, 9, 2];
78index = array.lastIndexOf(2);120var index = array.lastIndexOf(2);
t97    <pre>t139    <pre class="eval">
98indices = [];140var indices = [];
99idx = array.lastIndexOf(element)141var idx = array.lastIndexOf(element);
100while (idx != -1) {142while (idx != -1)
143{
101   indices.push(idx);144  indices.push(idx);
102   idx = (idx &gt; 0 ? array.lastIndexOf(element, idx - 1) : -1);145  idx = (idx &gt; 0 ? array.lastIndexOf(element, idx - 1) : -1);

Back to History