Baseline Widely available
reduceRight()
㯠Array
ã¤ã³ã¹ã¿ã³ã¹ã®ã¡ã½ããã§ãã¢ãã¥ã¼ã ã¬ã¼ã¿ã¼ã¨é
åã®ããããã®å¤ã«å¯¾ãã¦ï¼å³ããå·¦ã¸ï¼é¢æ°ãé©ç¨ãã¦ãåä¸ã®å¤ã«ãã¾ãã
å·¦ããå³ã¸é©ç¨ããå ´å㯠Array.prototype.reduce()
ãåç
§ãã¦ãã ããã
const array1 = [
[0, 1],
[2, 3],
[4, 5],
];
const result = array1.reduceRight((accumulator, currentValue) =>
accumulator.concat(currentValue),
);
console.log(result);
// Expected output: Array [4, 5, 2, 3, 0, 1]
æ§æ
reduceRight(callbackFn)
reduceRight(callbackFn, initialValue)
弿°
callbackFn
é
åã®åè¦ç´ ã«å¯¾ãã¦å®è¡ããã颿°ã§ãããã®è¿å¤ã¯ã次㫠callbackFn
ãå¼ã³åºãéã® accumulator
弿°ã®å¤ã«ãªãã¾ããæå¾ã®å¼ã³åºãã§ã¯ãè¿å¤ã¯ reduceRight()
ã®è¿å¤ã¨ãªãã¾ãããã®é¢æ°ã¯ä»¥ä¸ã®å¼æ°ã§å¼ã³åºããã¾ãã
accumulator
ååã® callbackFn
ã®å¼ã³åºãçµæã®å¤ã§ããååã®å¼ã³åºãã§ã¯ initialValue
ãæå®ããã¦ããå ´åã¯ãã®å¤ãããã§ãªãå ´åã¯ãã®é
åã®æ«å°¾ã®è¦ç´ ã®å¤ã§ãã
currentValue
ç¾å¨ã®è¦ç´ ã®å¤ã§ããååã®å¼ã³åºãã§ã¯ initialValue
ãæå®ãããå ´åã¯æ«å°¾ã®è¦ç´ ã®å¤ã§ãããããã§ãªãå ´åã¯æ«å°¾ãã 2 çªç®ã®è¦ç´ ã®å¤ã§ãã
currentIndex
currentValue
ã®ã¤ã³ããã¯ã¹ä½ç½®ã§ããååã®å¼ã³åºãã§ã¯ã initialValue
ãæå®ãããå ´å㯠array.length - 1
ãããã§ãªãå ´å㯠array.length - 2
ã§ãã
reduceRight()
ãå¼ã³åºãããé
åã§ãã
initialValue
çç¥å¯
callbackFn
ã®æåã®å¼ã³åºãã®ã¨ãã«ãã¢ãã¥ã¼ã ã¬ã¼ã¿ã¼ã¨ãã¦ä½¿ç¨ããå¤ã§ããåæå¤ããæ¸¡ãããªãã£ãå ´åã¯ãé
åã®æå¾ã®è¦ç´ ãé©ç¨ããããã®è¦ç´ ãé£ã°ããã¾ããã¾ãã reduceRight()
ã空ã®é
åã«å¯¾ãã¦åæå¤ãªãã§å¼ã³åºã㨠TypeError
ã«ãªãã¾ãã
ç³ã¿è¾¼ã¿ã«ãã£ã¦å¾ãããå¤ã§ãã
解説reduceRight()
ã¡ã½ããã¯å復å¦çã¡ã½ããã§ããã縮å°ãã³ã¼ã«ããã¯é¢æ°ãé
åã«å«ã¾ããåè¦ç´ ã«å¯¾ãã¦æé ã«ä¸åº¦ãã¤å¼ã³åºãããã®çµæãåä¸ã®å¤ã«ç©ç®ãã¾ãã
callbackFn
ã¯å¤ãå²ãå½ã¦ããã¦ããé
åã¤ã³ããã¯ã¹ã«å¯¾ãã¦ã®ã¿å¼ã³åºããã¾ããçé
åã®ç©ºã®ã¹ãããã«å¯¾ãã¦ã¯å¼ã³åºããã¾ããã
ä»ã®å復å¦çã¡ã½ããã¨ã¯ç°ãªãã reduceRight()
㯠thisArg
弿°ãåãå
¥ãã¾ããã callbackFn
ã¯å¸¸ã« undefined
ã this
ã¨ãã¦å¼ã³åºããã callbackFn
ã峿 ¼ã¢ã¼ãã§ãªãå ´å㯠globalThis
ã«ç½®ãæãããã¾ãã
reduceRight()
ã¡ã½ããã¯å¼ã³åºãå
ã®é
åã夿´ãã¾ãããã callbackFn
ã«æå®ããã颿°ã¯å¤æ´ãããã¨ãããã¾ãããã ããé
åã®é·ã㯠callbackFn
ãæåã«å¼ã³åºãåã«ä¿åããããã¨ã«æ³¨æãã¦ãã ããããããã£ã¦ã
callbackFn
㯠reduceRight()
ã®å¼ã³åºããå§ããã¨ãã®é
åã®é·ããè¶
ãã¦è¿½å ãããè¦ç´ ã«ã¯ã¢ã¯ã»ã¹ãã¾ãããcallbackFn
ãå度å¼ã³åºããããã¨ã¯ããã¾ãããcallbackFn
ã«ãã£ã¦å¤æ´ãããå ´åã callbackFn
ã«æ¸¡ãããå¤ã¯ãã®è¦ç´ ãåå¾ãããæç¹ã®å¤ã«ãªãã¾ããåé¤ãããè¦ç´ 㯠undefined
ã§ãããã®ããã«å¦çããã¾ããè¦å: åé ã§èª¬æãããããªãåç §ä¸ã®é åã®åæé²è¡ã§ã®å¤æ´ã¯ï¼ç¹æ®ãªå ´åãé¤ãã¦ï¼æ®éã¯é¿ããã¹ãã§ããå¤ãã®å ´åãçè§£ãã«ããã³ã¼ãã«ãªãã¾ãã
reduceRight()
ã¡ã½ããã¯æ±ç¨çã§ãããã㯠this
å¤ã« length
ããããã£ã¨æ´æ°ãã¼ã®ããããã£ããããã¨ã ããæå¾
ãã¾ãã
reduceRight ã® callbackFn
ã®å¼ã³åºãã¯æ¬¡ã®ããã«ãªãã¾ãï¼
arr.reduceRight((accumulator, currentValue, index, array) => {
// â¦
});
颿°ãåãã¦å¼ã³åºãããã¨ããaccumulator
㨠currentValue
ã¯ã2 ã¤ã®å¤ã®ããããã«ãªãã¾ãã initialValue
ãæå®ã㦠reduceRight
ãå¼ã³åºããå ´åãaccumulator
㯠initialValue
ã¨çãããªããcurrentValue
ã¯é
åã®æå¾ã®å¤ã¨çãããªãã¾ããinitialValue
ãæå®ãããªãã£ãå ´åãaccumulator
ã¯é
åã®æå¾ã®å¤ã«çãããcurrentValue
ã¯æå¾ãã 2 çªç®ã®å¤ã«çãããªãã¾ãã
é
åã空ã§ãinitialValue
ãæå®ãããªãã£ãå ´åã¯ãTypeError
ãçºçãã¾ããé
åã« (ä½ç½®ã«é¢ããã) è¦ç´ ã 1 ã¤ãããªããinitialValue
ãæå®ãããªãã£ãå ´åãã¾ã㯠initialValue
ãæå®ããããé
åã空ã ã£ãå ´åã¯ãcallbackFn
ãå¼ã³åºãããã«åç¬ã®å¤ãè¿ããã¾ãã
ãã®é¢æ°ã使ç¨ããå ´åã«ã¤ãã¦è¦ã¦ã¿ã¾ãããã
[0, 1, 2, 3, 4].reduceRight(
(accumulator, currentValue, index, array) => accumulator + currentValue,
);
ã³ã¼ã«ããã¯ã¯ 4 åå¼ã³åºãããããããã®å¼ã³åºãã®å¼æ°ã¨è¿å¤ã¯æ¬¡ã®ããã«ãªãã¾ãã
accumulator
currentValue
index
Return value First call 4
3
3
7
Second call 7
2
2
9
Third call 9
1
1
10
Fourth call 10
0
0
10
reduceRight
ã®è¿å¤ã¯ãã³ã¼ã«ããã¯å¼ã³åºãã®æå¾ã®è¿å¤ã§ãã (10
) ã«ãªãã¾ãã
ããã§ã¯ãåãã¢ã«ã´ãªãºã ã使ç¨ãã¦åãé
åã縮å°ãã¾ããã reduceRight()
ã® 2 ã¤ç®ã®å¼æ°ã§ãã initialValue
ã¨ã㦠10
ã使ç¨ãã¾ãã
[0, 1, 2, 3, 4].reduceRight(
(accumulator, currentValue, index, array) => accumulator + currentValue,
10,
);
accumulator
currentValue
index
Return value First call 10
4
4
14
Second call 14
3
3
17
Third call 17
2
2
19
Fourth call 19
1
1
20
Fifth call 20
0
0
20
reduceRight
ããè¿ãããå¤ã¯ãã®ã¨ãã®ãã®ã§ããã¡ãã 20
ã§ãã
const sum = [0, 1, 2, 3].reduceRight((a, b) => a + b);
// sum is 6
ä¸é£ã®ã³ã¼ã«ããã¯ã使ç¨ãã¦éåæé¢æ°ã®ãªã¹ããå®è¡ããããããã®çµæã次ã®ã³ã¼ã«ããã¯ã«æ¸¡ã
const waterfall =
(...functions) =>
(callback, ...args) =>
functions.reduceRight(
(composition, fn) =>
(...results) =>
fn(composition, ...results),
callback,
)(...args);
const randInt = (max) => Math.floor(Math.random() * max);
const add5 = (callback, x) => {
setTimeout(callback, randInt(1000), x + 5);
};
const mult3 = (callback, x) => {
setTimeout(callback, randInt(1000), x * 3);
};
const sub2 = (callback, x) => {
setTimeout(callback, randInt(1000), x - 2);
};
const split = (callback, x) => {
setTimeout(callback, randInt(1000), x, x);
};
const add = (callback, x, y) => {
setTimeout(callback, randInt(1000), x + y);
};
const div4 = (callback, x) => {
setTimeout(callback, randInt(1000), x / 4);
};
const computation = waterfall(add5, mult3, sub2, split, add, div4);
computation(console.log, 5); // -> 14
// same as:
const computation2 = (input, callback) => {
const f6 = (x) => div4(callback, x);
const f5 = (x, y) => add(f6, x, y);
const f4 = (x) => split(f5, x);
const f3 = (x) => sub2(f4, x);
const f2 = (x) => mult3(f3, x);
add5(f2, input);
};
reduce 㨠reduceRight ã®éã
const a = ["1", "2", "3", "4", "5"];
const left = a.reduce((prev, cur) => prev + cur);
const right = a.reduceRight((prev, cur) => prev + cur);
console.log(left); // "12345"
console.log(right); // "54321"
åæå¯è½ãªé¢æ°ã®å®ç¾©
颿°åæã¨ã¯ãå颿°ã®åºåãæ¬¡ã®é¢æ°ã«æ¸¡ããæå¾ã®é¢æ°ã®åºåãæçµçãªçµæã¨ããã颿°ãçµã¿åãããããã®ä»çµã¿ã§ãããã®ä¾ã§ã¯ reduceRight()
ã使ã£ã¦ã颿°åæãå®ç¾ãã¦ãã¾ãã
Wikipedia ã® Function composition ãåç §ãã¦ãã ããã
const compose =
(...args) =>
(value) =>
args.reduceRight((acc, fn) => fn(acc), value);
// 渡ãããæ°å¤ãã¤ã³ã¯ãªã¡ã³ããã
const inc = (n) => n + 1;
// 渡ãããæ°å¤ã 2 åã«ãã
const double = (n) => n * 2;
// åæé¢æ°ã使ç¨ãã
console.log(compose(double, inc)(2)); // 6
// åæé¢æ°ã使ç¨ãã
console.log(compose(inc, double)(2)); // 5
reduceRight() ãçé
åã§ä½¿ç¨
reduceRight()
ã¯çé
åã®æ¬ è½ãã¦ããè¦ç´ ãã¹ããããã¾ãããå¤ã undefined
ã®å ´åã¯ã¹ããããã¾ããã
console.log([1, 2, , 4].reduceRight((a, b) => a + b)); // 7
console.log([1, 2, undefined, 4].reduceRight((a, b) => a + b)); // NaN
é
å以å¤ã®ãªãã¸ã§ã¯ãã«å¯¾ãã reduceRight() ã®å¼ã³åºã
reduceRight()
ã¡ã½ãã㯠this
ã® length
ããããã£ãèªã¿è¾¼ã¿ã次ã«ãã¼ã length
ããå°ããéè² ã®æ´æ°ã§ããåããããã£ã«ã¢ã¯ã»ã¹ãã¾ãã
const arrayLike = {
length: 3,
0: 2,
1: 3,
2: 4,
3: 99, // length ã 3 ã§ãããã reduceRight() ããã¯ç¡è¦ããã
};
console.log(Array.prototype.reduceRight.call(arrayLike, (x, y) => x - y));
// -1 ããªãã¡ 4 - 3 - 2
仿§æ¸ ãã©ã¦ã¶ã¼ã®äºææ§ é¢é£æ
å ±
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4