我有一個物件陣列,例如:
[{}, {}, {}, {}, {}];
我還有一個遞回函式并接受一個函式作為引數:
function recursiveFunction(getResponse) {
const result = getResponse();
const conditionMet = check(result);
if(conditionMet) {
return result;
}
return recursiveFunction(getResponse);
}
如何創建一個函式,getResponse以便每次在recursiveFunction其中呼叫它時都會回傳陣列的下一次迭代?
例如,在每次遞回時,它應該獲取陣列中的下一個物件:
function getResponse(index) {
return array[index ];
}
當我呼叫它時:
const firstIndex = -1; // Because index in function
const result = recursiveFunction(getResponse(firstIndex));
我明白為什么它只回傳第一個值,但我不確定如何修改它以在再次呼叫它時回傳陣列中的下一個索引。
uj5u.com熱心網友回復:
在 JavaScript 中執行此操作的方法是使用內置的迭代協議-
const myinput =
[ {a:1}, {b:2}, {c:3}, {d:4} ]
const it =
myinput.values()
console.log(it.next())
console.log(it.next())
console.log(it.next())
console.log(it.next())
console.log(it.next())
{value: {a:1}, done: false}
{value: {b:2}, done: false}
{value: {c:3}, done: false}
{value: {d:4}, done: false}
{value: undefined, done: true}
您可以制作自己的iter函式,該函式回傳一個像您描述的函式一樣的函式-
function iter(iterable) {
const it = iterable.values()
return () => it.next().value
}
const inputA = [1,2,3]
const inputB = ["a","b","c"]
const nextA = iter(inputA)
const nextB = iter(inputB)
console.log(nextA()) // 1
console.log(nextA()) // 2
console.log(nextB()) // "a"
console.log(nextB()) // "b'
console.log(nextA()) // 3
console.log(nextB()) // "c"
console.log(nextA()) // undefined
console.log(nextB()) // undefined
在您的程式中,您必須檢查undefined以了解何時沒有剩余值 -
function recursiveCheck(check, getResponse) {
const result = getResponse()
if (result === undefined)
return "not found"
else if (check(result))
return "condition met"
else
return recursiveCheck(check, getResponse)
}
const output = recursiveCheck(myChcek, iter([{...}, {...}, ...]))
console.log(output)
在這種特殊情況下使用遞回意味著您輸入的大小將受到限制。如果你簡單地使用你for..of所有的問題消失 -
function iterativeCheck(check, iterable) {
for (const result of iterable)
if (check(result))
return "condition met"
return "not found"
}
const output = iterativeCheck(myCheck, [{...}, {...}, {...}, ...])
console.log(output)
另見Symbol.asyncIterator了解如何在異步迭代器上使用這種方法。
uj5u.com熱心網友回復:
您應該將函式作為引數傳遞,而不是呼叫函式。
const result = recursiveFunction(getResponse);
此外,如果您將索引初始化為-1,則需要使用 index,而不是index 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/382253.html
標籤:javascript 数组 递归
