我希望返回一个数组的索引数组,该数组包含使用JS中的纯函数的正元素。例如:
pos([1,-4,0,5,2])
>>[0,2,3,4]
所以,我试着:
arr.map(function (ele){
return arr.findIndex(ele => ele > 0);
})
But my output is :[1,1,1,1]
有人能告诉我出了什么问题吗?我相信我的map函数是正确的,但是findIndex()出了问题。(请不要告诉我代码,因为这是我的作业问题。只需要提示。)
发布于 2018-09-23 03:22:47
map()
并不是很正确,因为您不会对原始数组中的每个元素都有相应的输出。在本例中,reduce()
可能就是您想要的:
function pos(arr){
return arr.reduce((ret_arr, number, index) => {
if (number >= 0) ret_arr.push(index)
return ret_arr
}, [])
}
console.log(pos([1,-4,0,5,2]))
发布于 2018-09-23 03:25:04
如果值为正或-1
,您可以首先映射索引,然后过滤数组中现有的索引。
Array#map
返回一个带有元素索引的新数组,如果元素小于零,则返回-1
。
Array#filter
返回所有非-1
的值。简短的加法只返回一个truthy值,这是一个可能的索引。
function pos(array) {
return array // [1, -4, 0, 5, 2]
.map((v, i) => v < 0 ? -1 : i) // [0, -1, 2, 3, 4]
.filter(i => i + 1); // [0, 2, 3, 4]
}
console.log(pos([1, -4, 0, 5, 2]));
您的映射回调
function pos(arr) {
return arr.map(function (ele) {
return arr.findIndex(ele => ele > 0);
});
}
console.log(pos([1, -4, 0, 5, 2]));
不接受任何元素,因为以后永远不会使用第一个ele
变量。然后总是返回arr
的第一个元素的索引,即1
。这个值大于零,并且find
的回调返回true
和find移交给实际的索引。
发布于 2018-09-23 05:03:24
不要使用findIndex
。基本上你要找的是
function pos(arr) {
var res = [];
for (const [index, el] of arr.entries())
if (el > 0)
res.push(index)
return res;
}
如果您想使用高阶数组方法来完成此操作,您可以这样做
function pos(arr) {
return arr.map((ele, index) => [ele, index])
.filter(([ele]) => ele > 0)
.map(([_, origIndex]) => origIndex);
}
@尼纳斯霍尔茨也有一个很好的方法,尽管我把它写成
function pos(arr) {
return arr.map((ele, index) => ele > 0 ? index : null)
.filter(index => index !== null);
}
https://stackoverflow.com/questions/52460071
复制相似问题