Как преобразовать каждый элемент строки в массив, чтобы я мог выбрать только один элемент, например, данные [2] - PullRequest
2 голосов
/ 20 сентября 2019

вот мой код, я получил данные из хранилища Firebase.

listRef.listAll().then((res) => {
  res.prefixes.forEach((folderRef) => {
    // All the prefixes under listRef.
    // You may call listAll() recursively on them.
  });
  res.items.forEach((itemRef, index) => {
    itemRef.getDownloadURL().then((url) => {
      console.log(`${index} ${url}`)
    })
  });
})

Вот мой результат вывода, например
0 https://myfirebaseapp.com/videos/nice.mp4
1 https://myfirebaseapp.com/videos/bad.mp4
2 https://myfirebaseapp.com/videos/funny.mp4 [Мне нужен только этот элемент вместо целого списка]
3 https://myfirebaseapp.com/videos/good.mp4
4 https://myfirebaseapp.com/videos/sad.mp4

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Вы можете использовать find() метод в вашем массиве.Вот пример:

var items = [
  'https://myfirebaseapp.com/videos/nice.mp4',
  'https://myfirebaseapp.com/videos/bad.mp4',
  'https://myfirebaseapp.com/videos/funny.mp4',
  'https://myfirebaseapp.com/videos/good.mp4',
  'https://myfirebaseapp.com/videos/sad.mp4'
]

var funny = items.find(x => x.endsWith('funny.mp4'));

console.log(funny);

Для вашего кода это может выглядеть примерно так:

listRef.listAll().then((res) => {
  ...

  // Find the string that ends with 'funny.mp4'.
  var funnyItem = res.items.find(x => x.fullPath.endsWith('funny.mp4'));

  if(funnyItem) {
    // The item we want was found. Do something with it...
    funnyItem.getDownloadURL().then((url) => {
      console.log(`Fetching ${url}...`);
    });
  }
})

Приведенный выше пример будет работать, если мы не знаем местоположение funny.mp4.Если вы точно знаете, что местоположение нужного вам предмета всегда будет равно 2, то вы могли бы уйти с этим:

listRef.listAll().then((res) => {
  ...

  res.items[2].getDownloadURL().then((url) => {
    console.log(`Fetching ${url}...`);
  });
})

Если вам действительно просто нуженколлекция URL-адресов для загрузки (трудно определить по вашему вопросу), затем вы можете проецировать массив элементов с помощью функции map следующим образом:

listRef.listAll().then(async (res) => {
  ...

  var urls = await res.items.map(async x => Promise.all(await x.getDownloadURL()));
  console.log(`Fetching ${urls[2]}...`);
})

Имейте в виду, что это вызовет ожидаемое getDownloadURL() метод для каждого элемента, что, вероятно, нежелательно.

0 голосов
/ 20 сентября 2019

Вы должны поместить оператор if в forEach, проверяя индекс (если вы обычно хотите третий элемент списка) или название видео (если вы хотите именно это видео)

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