首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在JavaScript中查找数组中正元素的索引

在JavaScript中查找数组中正元素的索引
EN

Stack Overflow用户
提问于 2018-09-23 03:20:04
回答 5查看 1.6K关注 0票数 2

我希望返回一个数组的索引数组,该数组包含使用JS中的纯函数的正元素。例如:

pos([1,-4,0,5,2])

代码语言:javascript
复制
>>[0,2,3,4]

所以,我试着:

代码语言:javascript
复制
  arr.map(function (ele){
   return arr.findIndex(ele => ele > 0);
  })

But my output is :[1,1,1,1]

有人能告诉我出了什么问题吗?我相信我的map函数是正确的,但是findIndex()出了问题。(请不要告诉我代码,因为这是我的作业问题。只需要提示。)

EN

回答 5

Stack Overflow用户

发布于 2018-09-23 03:22:47

map()并不是很正确,因为您不会对原始数组中的每个元素都有相应的输出。在本例中,reduce()可能就是您想要的:

代码语言:javascript
复制
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]))

票数 1
EN

Stack Overflow用户

发布于 2018-09-23 03:25:04

如果值为正或-1,您可以首先映射索引,然后过滤数组中现有的索引。

Array#map返回一个带有元素索引的新数组,如果元素小于零,则返回-1

Array#filter返回所有非-1的值。简短的加法只返回一个truthy值,这是一个可能的索引。

代码语言:javascript
复制
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]));

您的映射回调

代码语言:javascript
复制
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移交给实际的索引。

票数 1
EN

Stack Overflow用户

发布于 2018-09-23 05:03:24

不要使用findIndex。基本上你要找的是

代码语言:javascript
复制
function pos(arr) {
    var res = [];
    for (const [index, el] of arr.entries())
        if (el > 0)
            res.push(index)
    return res;
}

如果您想使用高阶数组方法来完成此操作,您可以这样做

代码语言:javascript
复制
function pos(arr) {
    return arr.map((ele, index) => [ele, index])
              .filter(([ele]) => ele > 0)
              .map(([_, origIndex]) => origIndex);
}

@尼纳斯霍尔茨也有一个很好的方法,尽管我把它写成

代码语言:javascript
复制
function pos(arr) {
    return arr.map((ele, index) => ele > 0 ? index : null)
              .filter(index => index !== null);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52460071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档