Skip to content

Commit 7bd10c9

Browse files
committed
fix: fixes the binary search storybook demo
1 parent aab7b2f commit 7bd10c9

File tree

1 file changed

+43
-8
lines changed

1 file changed

+43
-8
lines changed

src/algorithms/search/array/demo-utils/search-performance-test.demo.js

Lines changed: 43 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ export class SearchPerformanceTest extends Component {
55
state = {
66
needle: '',
77
haystack: [],
8+
haystackConvertedToNumbers: [],
89
lastResultSet: null,
910
}
1011

@@ -19,39 +20,73 @@ export class SearchPerformanceTest extends Component {
1920
// Need a sorted array for binary search
2021
if (searchMethodName === 'Binary Search') {
2122
for (let i = 0; i < 100000; i += 5) {
22-
initialSearchArray.push(String(i + 1 + Math.floor(Math.random() * 4)))
23+
initialSearchArray.push(i + 1 + Math.floor(Math.random() * 4))
2324
}
2425
// Array can be in random order for other search methods
2526
} else {
2627
for (let i = 0; i < 20000; i++) {
27-
initialSearchArray.push(String(Math.floor(Math.random() * 20000)))
28+
initialSearchArray.push(Math.floor(Math.random() * 20000))
2829
}
2930
}
3031

31-
this.setState({ haystack: initialSearchArray })
32+
this.setState({
33+
haystack: initialSearchArray,
34+
haystackConvertedToNumbers: initialSearchArray,
35+
})
3236
}
3337

3438
handleNeedleChange = e => {
3539
this.setState({ needle: e.target.value })
3640
}
3741

3842
handleHaystackChange = e => {
39-
this.setState({ haystack: e.target.value.split(', ') })
43+
const updatedHaystack = e.target.value.split(', ')
44+
const haystackConvertedToNumbers = updatedHaystack.reduce(
45+
(fullArray, value) => {
46+
const valueWithoutTrailingComma = value.replace(',', '')
47+
if (valueWithoutTrailingComma === '') {
48+
return fullArray
49+
}
50+
51+
const valueConvertedToNumberIfPossible = isNaN(
52+
valueWithoutTrailingComma
53+
)
54+
? valueWithoutTrailingComma
55+
: Number(valueWithoutTrailingComma)
56+
return [...fullArray, valueConvertedToNumberIfPossible]
57+
},
58+
[]
59+
)
60+
this.setState({ haystack: updatedHaystack, haystackConvertedToNumbers })
4061
}
4162

4263
runPerformanceTest = e => {
4364
e.preventDefault()
4465

45-
const { needle, haystack } = this.state
66+
const { needle, haystackConvertedToNumbers } = this.state
4667
const { searchMethod } = this.props
4768

69+
if (
70+
!needle ||
71+
!haystackConvertedToNumbers ||
72+
haystackConvertedToNumbers.length === 0
73+
) {
74+
return this.setState({ lastResultSet: null })
75+
}
76+
77+
const needleConvertedToNumberIfPossible = isNaN(needle)
78+
? needle
79+
: Number(needle)
4880
const startTime = performance.now()
49-
const result = searchMethod(haystack, needle)
81+
const result = searchMethod(
82+
haystackConvertedToNumbers,
83+
needleConvertedToNumberIfPossible
84+
)
5085
const endTime = performance.now()
5186

5287
this.setState({
5388
lastResultSet: {
54-
haystack,
89+
haystack: [...haystackConvertedToNumbers],
5590
needle,
5691
result,
5792
timeTaken: endTime - startTime,
@@ -113,7 +148,7 @@ export class SearchPerformanceTest extends Component {
113148
<div className="arrayHaystack">
114149
<b>Array Haystack:</b>{' '}
115150
<div className="arrayHaystackCharacters">
116-
{haystack.join(', ')}
151+
{lastResultSet.haystack.join(', ')}
117152
</div>
118153
</div>
119154
</div>

0 commit comments

Comments
 (0)