te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>javascript - indexOf with multiple arguments - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - indexOf with multiple arguments - Stack Overflow

programmeradmin4浏览0评论

Is it possible to use multiple arguments when determining indexOf on an array?

I want to determine if my array contains any of three integers. Important to note at this stage that the array will only have one value (if it has more, it won't reach this code block).

array.indexOf(123 || 124 || 125) === 0

So if array = [123] then my indexOf should be 0 and therefore true.

If array = [124] then my indexOf should be 0 and therefore true.

What I am finding is happening is [123] works OK but it's not even bothering to check the indexOf for the 2nd or 3rd arguments, and is just returning false.

Is it possible to use multiple arguments when determining indexOf on an array?

I want to determine if my array contains any of three integers. Important to note at this stage that the array will only have one value (if it has more, it won't reach this code block).

array.indexOf(123 || 124 || 125) === 0

So if array = [123] then my indexOf should be 0 and therefore true.

If array = [124] then my indexOf should be 0 and therefore true.

What I am finding is happening is [123] works OK but it's not even bothering to check the indexOf for the 2nd or 3rd arguments, and is just returning false.

http://codepen.io/anon/pen/WxmyGp?editors=0011

Share Improve this question asked Aug 17, 2016 at 15:00 user1486133user1486133 1,4873 gold badges22 silver badges44 bronze badges 2
  • 3 It wouldn't make much sense at all for indexOf to accept multiple arguments, e.g. indexOf(1, 2, 3), because in the general case, what should the result be if multiple elements exist in the array…? – deceze Commented Aug 17, 2016 at 15:04
  • If you're open to using lodash, check out the answer here: stackoverflow./questions/29416454/lodash-hasintersection – adam0101 Commented Aug 17, 2016 at 15:09
Add a ment  | 

3 Answers 3

Reset to default 11

The || operator returns the left hand side if it is true, otherwise it returns the right hand side. 123 || 124 || 125 just means 123.

If you want to test if any of multiple values are in an array, then you have to test each one in turn.

array.indexOf(123) == 0 || array.indexOf(124) == 0 || array.indexOf(125) == 0 

Since you only care about one specific index the array, you can turn the whole thing on its head:

[123, 124, 125].indexOf(array[0]) > -1

You can do this using Array.some().

The nice thing about this approach is that you will only have to iterate through the array once. If you || multiple indexOf() calls together, you're going to keep iterating the array with every missed search.

function checkArray(array) {
  return array.some(function(item) {
    return item == 123 || item == 124 || item == 125;
  });
};

console.log(checkArray([123, 456, 789]));
console.log(checkArray([456, 789]));
console.log(checkArray([789, 456, 125]));

If you want to get multiple results one other way of doing this is Array.prototype.filter(). Bu this will return you the objects itself. If you are interested in the indices then you have to bine it with Array.prototype.reduce() such as;

var a = [1,2,3],
    b = a.filter(e => e === 1 || e === 2)
         .reduce((p,c) => p.concat(a.indexOf(c)),[]);
console.log(b);

发布评论

评论列表(0)

  1. 暂无评论