Array.find方法跳过0的整数?

时间:2018-01-08 13:01:57

标签: javascript arrays find

我遇到了一个问题,在我看来它应该是相当普遍的,但我无法在任何地方找到答案,stackexchange或google。 当我在嵌套在另一个数组中的数组上使用find方法时,find方法永远不会找到整数0,无论它放在何处。所有其他数字通常都可以找到。

我可以通过将所有索引增加一个来修复我的应用中的问题,但这是相当笨重的,我真正想知道的是为什么这首先发生?并且在不更新所有索引的情况下修复它也很不错。

const ids = [
    [0,1,2,3],
    [4,5,6,7],
    [8,9,10,11],
    [12,13,14,15],
    [16,17,18,19]
    ]


const findBlock = value => {
    return ids.find( element => { 
        return element.find(number => { 
            return number === value 
        })
    })
}
console.log(findBlock(0));

  

返回undefined

2 个答案:

答案 0 :(得分:4)

您需要明确检查undefined,因为Array#find会返回值或undefined

您获取undefined之类的0值作为结果。但const ids = [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15], [16, 17, 18, 19]] const findBlock = value => ids.find(element => element.includes(value)); console.log(findBlock(0));的价值也是假值。

要搜索元素并仅获取布尔值,可以使用falsy



$('.selector').datepicker({
  beforeShowDay: function (date) {
    var year = date.getFullYear()
    var currentYear = new Date().getFullYear()
    return [ year >= currentYear || year <= currentYear - 20 ]
  }
});
&#13;
&#13;
&#13;

答案 1 :(得分:3)

  

我真正想知道的是为什么这会在第一次发生   放置?

因为内部return返回0时,会将其视为 falsey值

只是做到了

findBlock = value => {
    return ids.find( element => { 
        console.log(element);
        return element.find(number => { 
            console.log(number);
            return number === value 
        }) != -1 //observe this line
    })
}

<强>演示

var ids = [ [0,1,2,3], [4,5,6,7], [8,9,10,11], [12,13,14,15], [16,17,18,19] ];

var findBlock = value => {
    return ids.find( element => { 
        return element.find(number => { 
            return number === value 
        }) != -1
    })
};
console.log(findBlock(0));