reduce 语句中的单行 if 语句不起作用
Single line if statement in reduce statement not working
我正在尝试编写一个 reduce 语句,给定一个字符串数组,return 包含单词 'lace' 的数组索引。
我让它可以使用多行 if 语句,但是当我使用单行 if 语句时它不起作用:
输入数组
arr = [ 'tasselled', 'black', 'low-top', 'lace-up' ]
预期输出
[3] // since the string 'lace' is in the 3rd index of the array
我的代码
// works (multi-line if statement)
arr.reduce( function(a,e,i) {
if (e.indexOf('lace') >= 0) {
a.push(i)
}
return a
}, [])
// returns [3]
// doesn't work (single-line if statement)
arr.reduce( (a,e,i) => e.indexOf('lace')>=0 ? a.push(i) : 0, []);
// side note - can you do single-line if-statements without the else statement? (without the ': 0')
// returns error:
TypeError: a.push is not a function
在你的 reduce 语句中,如果 indexOf <0 那么你 return 0 而不是数组,try
arr = [ 'tasselled', 'black', 'low-top', 'lace-up' ];
let r=arr.reduce( (a,e,i) => (e.indexOf('lace')>=0 ? a.push(i) : 0, a), []);
console.log(r);
它不起作用的主要原因是因为您的三元运算 returns 在两种情况下都是一个数字。 .push()
returns 数组的 length
而不是数组本身。
因此您可以将其更改为使用 concat
:
const arr = [ 'tasselled', 'black', 'low-top', 'lace-up' ]
const output = arr.reduce((a,e,i) => e.includes('lace') ? a.concat(i) : a, []);
console.log(output)
const arr = [ 'tasselled', 'black', 'low-top', 'lace-up' ]
const output = [...arr.keys()].filter(i => arr[i].includes('lace'))
console.log(output)
我正在尝试编写一个 reduce 语句,给定一个字符串数组,return 包含单词 'lace' 的数组索引。
我让它可以使用多行 if 语句,但是当我使用单行 if 语句时它不起作用:
输入数组
arr = [ 'tasselled', 'black', 'low-top', 'lace-up' ]
预期输出
[3] // since the string 'lace' is in the 3rd index of the array
我的代码
// works (multi-line if statement)
arr.reduce( function(a,e,i) {
if (e.indexOf('lace') >= 0) {
a.push(i)
}
return a
}, [])
// returns [3]
// doesn't work (single-line if statement)
arr.reduce( (a,e,i) => e.indexOf('lace')>=0 ? a.push(i) : 0, []);
// side note - can you do single-line if-statements without the else statement? (without the ': 0')
// returns error:
TypeError: a.push is not a function
在你的 reduce 语句中,如果 indexOf <0 那么你 return 0 而不是数组,try
arr = [ 'tasselled', 'black', 'low-top', 'lace-up' ];
let r=arr.reduce( (a,e,i) => (e.indexOf('lace')>=0 ? a.push(i) : 0, a), []);
console.log(r);
它不起作用的主要原因是因为您的三元运算 returns 在两种情况下都是一个数字。 .push()
returns 数组的 length
而不是数组本身。
因此您可以将其更改为使用 concat
:
const arr = [ 'tasselled', 'black', 'low-top', 'lace-up' ]
const output = arr.reduce((a,e,i) => e.includes('lace') ? a.concat(i) : a, []);
console.log(output)
const arr = [ 'tasselled', 'black', 'low-top', 'lace-up' ]
const output = [...arr.keys()].filter(i => arr[i].includes('lace'))
console.log(output)