我在理解此reduce示例的if语句时遇到问题:
SimpleInit
我试图理解伪代码中的if语句,阅读此示例后,我会继续看到以下内容:
const colors = ['red', 'red', 'green', 'blue', 'green', 'yellow'];
console.log(colors);
const distinctColors = colors.reduce(
(distinct, color) =>
(distinct.indexOf(color) !== -1) ?
distinct :
[...distinct, color], []
)
console.log(distinctColors)
我要关闭还是要离开?
测试版本here
答案 0 :(得分:1)
试图用注释进行解释,希望能有所帮助。
const colors = ['red', 'red', 'green', 'blue', 'green', 'yellow'];
console.log(colors);
const distinctColors = colors.reduce(
(distinct, color) =>
(distinct.indexOf(color) !== -1) ?
// ----------------^ Turnary to test for presence of current color in the accum []
distinct :
// ----^ It DOES exist, so return the current Accum array
[...distinct, color], []
// ---^ Is DOES NOT exist, return a new array of Accum + Color
// --------------------^ This initialises a new empty array into the accumulator
)
console.log(distinctColors)
只需添加此内容以供参考,为此使用一个集要有效得多。
const colors = ['red', 'red', 'green', 'blue', 'green', 'yellow'];
console.log(colors);
const distinctColors = [...new Set(colors)];
console.log(distinctColors)
这是Set上的MDN文档。 Javascript Set
答案 1 :(得分:0)
它将数组减小为唯一值。您可以将其读取为:
将distinct
设置为一个空数组(要减少的第二个参数)。对于color
中的每个colors
,如果color
在distinct
(索引为== -1)中,请将distinct
更新为distinct
( no-op)(第一三进制分支),否则,如果color
不在distinct
中,则将distinct
更新为distinct
+ color
(第二三进制分支)。
请参阅mdn reduce
文档。