JavaScript, эквивалентный из in_array PHP ()

$this->db->where('g_total != 0');

!== не является допустимым выражением

Или даже лучше: $this->db->where('g_total !=', 0);

201
задан Peter Mortensen 8 April 2013 в 03:34
поделиться

5 ответов

Нет, его нет. По этой причине большинство популярных библиотек поставляются с одной в своих пакетах утилит. Посмотрите примеры jQuery inArray и Prototype Array.indexOf .

Реализация этого в jQuery настолько проста, насколько вы можете ожидать:

function inArray(needle, haystack) {
    var length = haystack.length;
    for(var i = 0; i < length; i++) {
        if(haystack[i] == needle) return true;
    }
    return false;
}

Если вы имеете дело с нормальным количеством элементов массива, вышеприведенное хорошо сработает.

РЕДАКТИРОВАТЬ : Упс. Я даже не заметил, что вы хотели увидеть, был ли массив внутри другого. Согласно документации PHP, это ожидаемое поведение PHP in_array :

$a = array(array('p', 'h'), array('p', 'r'), 'o');

if (in_array(array('p', 'h'), $a)) {
    echo "'ph' was found\n";
}

if (in_array(array('f', 'i'), $a)) {
    echo "'fi' was found\n";
}

if (in_array('o', $a)) {
    echo "'o' was found\n";
}

// Output:
//  'ph' was found
//  'o' was found

Код, размещенный Крисом и Алексом, не следует этому поведению. Алекс является официальной версией прототипа indexOf, а Крис больше похож на PHP array_intersect . Это делает то, что вы хотите:

245
ответ дан 23 November 2019 в 05:04
поделиться

Если вы хотите только чтобы проверить, находится ли единственное значение в массиве, тогда код Паоло сделает эту работу. Если вы хотите проверить, какие значения являются общими для обоих массивов, вам понадобится что-то вроде этого (с помощью функции inArray от Paolo):

function arrayIntersect(a, b) {
    var intersection = [];

    for(var i = 0; i < a.length; i++) {
        if(inArray(b, a[i]))
            intersection.push(a[i]);
    }

    return intersection;
}

Это вернет массив значений, которые находятся в a и б . (Математически это пересечение двух массивов.)

РЕДАКТИРОВАТЬ: См. Отредактированный код Паоло для решения вашей проблемы. :)

3
ответ дан 23 November 2019 в 05:04
поделиться

Array.indexOf был представлен в JavaScript 1.6, но он не поддерживается в старых браузерах. К счастью, ребята из Mozilla сделали всю тяжелую работу для вас и предоставили вам это для совместимости:

if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(elt /*, from*/)
  {
    var len = this.length >>> 0;

    var from = Number(arguments[1]) || 0;
    from = (from < 0)
         ? Math.ceil(from)
         : Math.floor(from);
    if (from < 0)
      from += len;

    for (; from < len; from++)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
  };
}

Есть даже несколько удобных фрагментов использования для вашего удовольствия от написания сценариев.

65
ответ дан 23 November 2019 в 05:04
поделиться

Можно просто использовать, "включает" функцию, как объяснено в этот урок по w3schools

, на который это похоже

let myArray = ['Kevin', 'Bob', 'Stuart'];
if( myArray.includes('Kevin'))
alert('Kevin is here');
1
ответ дан 23 November 2019 в 05:04
поделиться
haystack.find(value => value == needle)

то, где стог сена является массивом и иглой, является элементом в массиве. Если элемент, не найденный еще, будет возвращен неопределенный тот же элемент.

2
ответ дан 23 November 2019 в 05:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: