测试一个多维数组内的操作是否匹配一个数字

Javascript: test if an operation inside a multidimensional array matches a number

本文关键字:一个 是否 数字 操作 测试 数组      更新时间:2023-09-26

我有这样一个数组:

var tasks = [
["First Task",1,0],
["Second Task...",4,5],
["Third Task!",0,5]
];

注意:任务旁边的数字是人完成任务所需要的分和秒。

我想测试一下这些任务是否有一定的秒数。基本上,我想知道对于任何任务,第一个数字* 60 +第二个数字是否等于someNumOfSecs。因此,如果someNumOfSecs == 60,则条件将返回true,但如果someNumOfSecs == 58,则返回false。同样,我不想测试一个特定的任务,而是整个数组。我该怎么做呢?谢谢你。

顺便说一下:如果我的解释不是很清楚,我很抱歉,所以如果你有什么不明白的,请评论。

你可以使用Array.prototype.some(),看看是否有任何元素匹配你正在寻找的。

var value = 60;
var match = tasks.some(function (item) {
 return (item[1] * 60 + item[2]) === value;
});
var tasks = [
   ["First Task",1,0],
   ["Second Task...",4,5],
   ["Third Task!",0,5]
];
function getByNumSeconds(secs) {
   return tasks.filter(function(t) {
       return (t[1] * 60 + t[2]) === secs;
   });
}
console.log(getByNumSeconds(60)) // ["First Task",1,0]

要获得满足条件的数组,可以使用Array.prototype.filter:

function filterSomeNumOfSecs(someNumOfSecs) {
   return tasks
     .filter(function(task) {
        return (task[1]*60 + task[2]) === someNumOfSecs;
     });
}
filterSomeNumOfSecs(5); => [["Third Task!",0,5]]

现在,如果你只想要任务的名称,你也可以使用Array.prototype.map:

function mapSomeNumOfSecs(someNumOfSecs) {
   return tasks
     .filter(function(task) {
        return (task[1]*60 + task[2]) === someNumOfSecs;
     })
     .map(function(task) {
        return task[0];
     });
}
mapSomeNumOfSecs(5); => ["Third Task!"]
相关文章: