js如何用 一行代码将[true, false, false, true, true] 转成 [0,3,4]

在群里看到别人水的一个问题,原题是用python的问的
[true, false, false, true, true] 如何用 一行代码 转成 [0,3,4]

我的写法是这样:

let a = [true, false, false, true, true];
a.map( (val,idx) => (val && idx ) ).filter( val => Number.isFinite(val) || val );

不知道有没有更好的答案

阅读 5.9k
3 个回答

脑洞一下

a.reduce((res, el, i) => (el && res.push(i), res), [])
a.map((el, i) => el ? i : -1).filter(el => el > -1)
Array.from(new Set(['#', ...a.map((el, i) => el ? i : '#')])).slice(1)
JSON.parse(`[${(a.toString().replace(/.*?true/ig, (m,i,s) => (s.slice(0,i) + m).split(',').length-1 + ',')).slice(0,-1)}]`)
let b = [true, false, false, true, true]
b = b.reduce((prev, curr, index) => prev.concat(curr ? [index] : []), [])

a.map((x,y) => x?y:x).filter(x => x!==false)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题