JQuery / Javascript показать результат от до - PullRequest
1 голос
/ 22 мая 2019

Это новый вопрос, который переписан с использованием javascript / jQuery этого потока, потому что я не могу сделать это в запросе MySQL напрямую.

MySQL Выбрать id из to и исключить начальный и конечный id

Итак, вопрос прост:

У меня есть массив, полученный из запроса MySQL в массив javascript:

var array = ["m2", "1", "2", "11", "12", "m4", "m3", "m5", "17", "m1"];

И нужна функция, которая принимает параметр из какого массивазначение, чтобы показать.Например:

function showCategories(marker){

}

Так что в приведенном выше примере, если я звоню showCategories("m2");, мне нужно получить это:

1
2
11
12

Если я звоню showCategories("m5");, мне нужно получить это:

17

В настоящее время я пытаюсь извлечь и найти индекс начала "m2" в первом примере, найти последний индекс m (то есть m4) и удалить другие элементы из массива. Есть ли простой способ?

Ответы [ 3 ]

2 голосов
/ 22 мая 2019

Найдите индекс вашего маркера, нарежьте все после него, затем найдите первый индекс "m" в этом массиве и нарежьте его до него.Все, что осталось, это числа между ними.

var array = ["m2", "1", "2", "11", "12", "m4", "m3", "m5", "17", "m1"];

function showCategories(marker){
  let start = array.indexOf(marker);
  if (start === -1) return [];
  
  let slicedArray = array.slice(start + 1);
  let end = slicedArray.findIndex(val => val.startsWith("m"));
  return slicedArray.slice(0, end);
}

console.log(showCategories("m2"));
console.log(showCategories("m5"));
1 голос
/ 22 мая 2019

Что ж, я думаю, что вы можете перейти к циклу, чтобы найти необходимый индекс и сохранить результат в подмассиве.

Один из способов - выполнить цикл до тех пор, пока вы не найдете "m2", выполнив:

function showCategories(find)
{
  let returnArray = [];
  let start = null;
  if (array.includes(find) //checks if the element exists
  {
    for(int i = 0; i < array.length; i++)
    {
      if (start == null && array[i] == "m2") //looks for element
      {
        start = i;
      }
      else if(isNaN(Number(array[i]))) //pushes element into array
      {
        returnArray.push(array[i]);
      }
      else if(start != null && !isNaN(Number(array[i]))) //breaks if element after find is not an int
      {
        break;
      }
    }
  }
  return returnArray;
}

Я не проверял это, но что-то в этом роде будет работать.

1 голос
/ 22 мая 2019

var array = ["m2", "1", "2", "11", "12", "m4", "m3", "m5", "17", "m1"];

function showCategories(marker) {
  let currentCat = 'n';
  return array.reduce((obj, item) => {
    if (item.indexOf("m") === -1) {
      obj[currentCat].push(item);
    } else {
      currentCat = item;
      obj[currentCat] = [];
    }
    return obj;
  }, {})[marker] || [];
}

console.log(showCategories("m2"));
console.log(showCategories("m5"));

Процесс логики

Как вы можете видеть, я использую уменьшение и определяю, содержит ли значение в элементе m который будет обозначать новую "категорию".

Затем я помещаю все значения, следующие за новой категорией, в массив, пока не появится другая категория, снова содержащая m.

Надеждаэто помогает.

...