LibJS: Call Array.prototype.findIndex() callback for empty elements

If the array value at the current index is empty, the callback will
be called with undefined as value.
This commit is contained in:
Linus Groh 2020-04-28 18:10:40 +01:00 committed by Andreas Kling
parent 823cc7bc1c
commit 3152559422
Notes: sideshowbarker 2024-07-19 07:13:02 +09:00
3 changed files with 27 additions and 7 deletions

View file

@ -489,12 +489,12 @@ Value ArrayPrototype::find_index(Interpreter& interpreter)
auto array_size = array->elements().size();
for (size_t i = 0; i < array_size; ++i) {
if (i >= array->elements().size())
break;
auto value = array->elements().at(i);
if (value.is_empty())
continue;
auto value = js_undefined();
if (i < array->elements().size()) {
value = array->elements().at(i);
if (value.is_empty())
value = js_undefined();
}
MarkedValueList arguments(interpreter.heap());
arguments.append(value);

View file

@ -23,6 +23,26 @@ try {
assert(array.findIndex(value => value > 100) === -1);
assert([].findIndex(value => value === 1) === -1);
var callbackCalled = 0;
var callback = () => { callbackCalled++; };
[].findIndex(callback)
assert(callbackCalled === 0);
[1, 2, 3].findIndex(callback);
assert(callbackCalled === 3);
callbackCalled = 0;
[1, , , "foo", , undefined, , ,].findIndex(callback);
assert(callbackCalled === 8);
callbackCalled = 0;
[1, , , "foo", , undefined, , ,].findIndex(value => {
callbackCalled++;
return value === undefined;
});
assert(callbackCalled === 2);
console.log("PASS");
} catch (e) {
console.log("FAIL: " + e);

View file

@ -17,7 +17,7 @@ try {
callbackCalled++;
a.pop();
});
assert(callbackCalled === 3);
assert(callbackCalled === 5);
console.log("PASS");
} catch (e) {