Как я могу получить цикл и фильтр сразу в JavaScript - PullRequest
0 голосов
/ 22 января 2019

    const count = [
        {number: 1},
        {number: 2},
        {number: 3},
        {number: 4},
        {number: 5},
        {number: 6},
        {number: 7},
        {number: 8},
        {number: 9},
        {number: 10},
        {number: 11},
        {number: 12},
        {number: 13},
        {number: 14},
        {number: 15}
        ];
 
 
    for(let i = 0;i < count.length; i++) {

    document.write(count[i].number);
    }

Если главное число, которое я хочу вывести из цикла - это 5. Но я хочу выписать одно над 5 и одно под 5. Итак, 456. Как я могудостичь этого?

Ответы [ 4 ]

0 голосов
/ 22 января 2019

        const count = [
      { number: 1 },
      { number: 2 },
      { number: 3 },
      { number: 4 },
      { number: 5 },
      { number: 6 },
      { number: 7 },
      { number: 8 },
      { number: 9 },
      { number: 10 },
      { number: 11 },
      { number: 12 },
      { number: 13 },
      { number: 14 },
      { number: 15 }
    ];
    var index = count.findIndex(item => item.number === 5);
    document.write(count[index - 1].number);
    document.write(count[index].number);
    document.write(count[index + 1].number);
0 голосов
/ 22 января 2019

Чтобы отфильтровать желаемое число, вы можете использовать оператор if, чтобы проверить, является ли номер текущего объекта count[i].number желаемым значением, а затем, если это так, распечатать связанные с ним значения.

Вы можете получить доступ к объекту до и после изменения значения i. Используя i-1, вы получите элемент перед вашим текущим значением. Аналогично, используя i+1, вы перейдете к объекту после вашего текущего значения.

Наконец, вы должны проверить значение i, чтобы убедиться, что оно попадает в массив. Например, если вы решили найти число 1, у которого нет объекта перед, и поэтому вам нужно проверить этот случай!

См. Рабочий пример ниже:

const count = [
        {number: 1},
        {number: 2},
        {number: 3},
        {number: 4},
        {number: 5},
        {number: 6},
        {number: 7},
        {number: 8},
        {number: 9},
        {number: 10},
        {number: 11},
        {number: 12},
        {number: 13},
        {number: 14},
        {number: 15}
        ];
 
const toFind = 5;
for(let i = 0; i < count.length; i++) {
  if(count[i].number == toFind) {
    if(i-1 >= 0) console.log(count[i-1].number);
    console.log(count[i].number);
    if(i+1 < count.length) console.log(count[i+1].number);
    break; // complete loop cycle
  }
}
0 голосов
/ 22 января 2019

Вы можете напрямую использовать forEach и в зависимости от диапазона вы можете писать в документ.

const count = [{number: 1},{number: 2},{number: 3},{number: 4},{number: 5},{number: 6},{number: 7},{number: 8},{number: 9},{number: 10},{number: 11},{number: 12},{number: 13},{number: 14},{number: 15}];
        
count.forEach(({number})=> {
  if(number>3 && number<7){
    document.write(number)
  }
})
0 голосов
/ 22 января 2019

Если предположить, что needle уникален, вы можете .filter ввести нужные числа, а затем .forEach, чтобы напечатать их.

const needle = 5
const haystack = [
  {number: 1},
  {number: 2},
  {number: 3},
  {number: 4},
  {number: 5},
  {number: 6},
  {number: 7},
  {number: 8},
  {number: 9},
  {number: 10},
  {number: 11},
  {number: 12},
  {number: 13},
  {number: 14},
  {number: 15}
]

haystack
  .sort((a, b) => a.number - b.number) // skip this if haystack is already sorted.
  .filter(el => [needle - 1, needle, needle + 1].includes(el.number))
  .forEach(el => {
    document.write(el.number)
  })

Обратите внимание, что вы должны принять меры против needle = 0, у которого нет -1 и needle = 15, у которого нет +1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...