@@ -41,14 +41,14 @@ var ndarraylike2scalar = require( '@stdlib/ndarray/base/ndarraylike2scalar' );
41
41
* var ndarray = require( '@stdlib/ndarray/base/ctor' );
42
42
* var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' );
43
43
*
44
- * var xbuf = new Float32Array( [ 1.0, 2 .0, 4.0, 2.0 ] );
44
+ * var xbuf = new Float32Array( [ 1.0, 3 .0, 4.0, 2.0 ] );
45
45
* var x = new ndarray( 'float32', xbuf, [ 4 ], [ 1 ], 0, 'row-major' );
46
46
*
47
47
* var searchElement = scalar2ndarray( 2.0, {
48
48
* 'dtype': 'float32'
49
49
* });
50
50
*
51
- * var fromIndex = scalar2ndarray( 3 , {
51
+ * var fromIndex = scalar2ndarray( 0 , {
52
52
* 'dtype': 'generic'
53
53
* });
54
54
*
@@ -58,6 +58,9 @@ var ndarraylike2scalar = require( '@stdlib/ndarray/base/ndarraylike2scalar' );
58
58
function slastIndexOf ( arrays ) {
59
59
var searchElement ;
60
60
var fromIndex ;
61
+ var stride ;
62
+ var offset ;
63
+ var idx ;
61
64
var N ;
62
65
var x ;
63
66
@@ -69,12 +72,20 @@ function slastIndexOf( arrays ) {
69
72
if ( fromIndex < 0 ) {
70
73
fromIndex += N ;
71
74
if ( fromIndex < 0 ) {
72
- return - 1 ;
75
+ fromIndex = 0 ;
73
76
}
74
77
} else if ( fromIndex >= N ) {
75
- fromIndex = N - 1 ;
78
+ return - 1 ;
76
79
}
77
- return strided ( fromIndex + 1 , searchElement , getData ( x ) , getStride ( x , 0 ) , getOffset ( x ) ) ; // eslint-disable-line max-len
80
+ N -= fromIndex ;
81
+ stride = getStride ( x , 0 ) ;
82
+ offset = getOffset ( x ) + ( stride * fromIndex ) ;
83
+
84
+ idx = strided ( N , searchElement , getData ( x ) , stride , offset ) ;
85
+ if ( idx >= 0 ) {
86
+ idx += fromIndex ;
87
+ }
88
+ return idx ;
78
89
}
79
90
80
91
0 commit comments