Pk be ! ToString(𝔽(k)). b. Let kPresent be ! HasProperty(O, Pk). c. If kPresent is true, then i. Let elementK be ! Get(O, Pk). ii. If IsStrictlyEqual(searchElement, elementK) is true, return 𝔽(k). d. Set k to k + 1. 6
k < len { // a. Let kPresent be ! HasProperty(O, ! ToString(𝔽(k))). let k_present = has_property(...)?; // b. If kPresent is true, then if k_present { // i. Let elementK be ! Get(O, ! ToString(𝔽(k))). let element_k = unwrap_try(try_get(...)); // ii. If IsStrictlyEqual(searchElement, elementK) is true, return 𝔽(k). if is_strictly_equal(agent, search_element, element_k) { return Ok(k.try_into().unwrap()); } } // c. Set k to k + 1. k += 1 } 7
Uint32Array(SIZE); arr.indexOf(9999999); ❯ time cargo run eval index.js Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.08s Running `target/debug/nova_cli eval index.js` cargo run eval index.js 16.88s user 0.29s system 96% cpu 17.724 total 8
Let lower be 0. 6. Repeat, while lower ≠ middle, a. Let upper be len - lower - 1. b. Let upperP be ! ToString(𝔽(upper)). c. Let lowerP be ! ToString(𝔽(lower)). d. Let lowerValue be ! Get(O, lowerP). e. Let upperValue be ! Get(O, upperP). f. Perform ! Set(O, lowerP, upperValue, true). g. Perform ! Set(O, upperP, lowerValue, true). h. Set lower to lower + 1. length - 1がその配列の最大値、そしてそこからlower文を引くので、ループするたびに最大値から一個少なくなる。 ループ時点での最初の値を最後に、最後の値を最初に持ってくるようにsetする。 13
be len - lower - 1. let upper = len - lower - 1; // b. Let upperP be ! ToString(𝔽(upper)). let upper_p = PropertyKey::Integer(upper.try_into().unwrap()); // c. Let lowerP be ! ToString(𝔽(lower)). let lower_p = PropertyKey::Integer(lower.try_into().unwrap()); // d. Let lowerValue be ! Get(O, lowerP). let lower_value = unwrap_try(try_get(...)); // e. Let upperValue be ! Get(O, upperP). let upper_value = unwrap_try(try_get(...)); // f. Perform ! Set(O, lowerP, upperValue, true). try_set(...); // g. Perform ! Set(O, upperP, lowerValue, true). try_set(...); // h. Set lower to lower + 1. lower += 1; } 14