Извлечение нужного значения из массива путем поиска с суффиксом - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть такой массив:

{
  "result": [
    {
      "name": "2015.494782.1981AugustSapthagirikannada.gif",
      "source": "derivative",
      "format": "Animated GIF",
      "original": "2015.494782.1981AugustSapthagirikannada_jp2.zip",
      "mtime": "1490522158",
      "size": "270516",
      "md5": "5f0758aaef567d76916620f2ed568cb9",
      "crc32": "f70dda86",
      "sha1": "99c63d12e5d8c115a66d51715d998cd2534254a1"
    },
    {
      "name": "2015.494782.1981AugustSapthagirikannada.pdf",
      "source": "original",
      "mtime": "1484723772",
      "size": "7488708",
      "md5": "eecd0d8ae44a69fa0b398f8e00dda573",
      "crc32": "f06bf0f0",
      "sha1": "f00af63426b93a9587b0b59b20cc4beb79482243",
      "format": "Image Container PDF"
    }
  ]
}

Где я хотел бы извлечь имя файла, заканчивающееся на ".pdf".

Ожидаемый результат:

2015.494782.1981AugustSapthagirikannada.pdf

Ответы [ 2 ]

0 голосов
/ 05 апреля 2020

Метод 1: Сделайте это с помощью find и endsWith
Метод 2: Go для любого l oop, Каждое имя объекта split и проверьте с помощью последнего слова в разделенном массиве, требуется ли это файл pdf или нет.

const data = {
  result: [
    {
      name: "2015.494782.1981AugustSapthagirikannada.gif",
      source: "derivative",
      format: "Animated GIF",
      original: "2015.494782.1981AugustSapthagirikannada_jp2.zip",
      mtime: "1490522158",
      size: "270516",
      md5: "5f0758aaef567d76916620f2ed568cb9",
      crc32: "f70dda86",
      sha1: "99c63d12e5d8c115a66d51715d998cd2534254a1"
    },
    {
      name: "2015.494782.1981AugustSapthagirikannada.pdf",
      source: "original",
      mtime: "1484723772",
      size: "7488708",
      md5: "eecd0d8ae44a69fa0b398f8e00dda573",
      crc32: "f06bf0f0",
      sha1: "f00af63426b93a9587b0b59b20cc4beb79482243",
      format: "Image Container PDF"
    }
  ]
};

// Method 1
const item = data.result.find(({ name }) => name.endsWith(".pdf"));
const file_name = item ? item.name : "not found";

// Method 2
let file_name2 = "not found";
data.result.forEach(obj => {
  if (obj.name.split(".").pop() === "pdf") {
    file_name2 = obj.name;
  }
});

console.log(file_name);
console.log(file_name2);
0 голосов
/ 05 апреля 2020

Вы можете использовать find, если хотите только один. Или filter и map, если их может быть несколько:

const data = {"result":[{"name":"2015.494782.1981AugustSapthagirikannada.gif","source":"derivative","format":"Animated GIF","original":"2015.494782.1981AugustSapthagirikannada_jp2.zip","mtime":"1490522158","size":"270516","md5":"5f0758aaef567d76916620f2ed568cb9","crc32":"f70dda86","sha1":"99c63d12e5d8c115a66d51715d998cd2534254a1"},{"name":"2015.494782.1981AugustSapthagirikannada.pdf","source":"original","mtime":"1484723772","size":"7488708","md5":"eecd0d8ae44a69fa0b398f8e00dda573","crc32":"f06bf0f0","sha1":"f00af63426b93a9587b0b59b20cc4beb79482243","format":"Image Container PDF"}]};
// Will return the first it finds
console.log(
  data.result.find(file => file.name.endsWith('.pdf')).name
);
// Will return an Array with all PDF file names
console.log(
  data.result.filter(file => file.name.endsWith('.pdf')).map(file => file.name)
);

Примечание. Приведенный выше код использует синтаксис ES6 (const, функции стрелок, .endsWith) , который не будет работать в IE и другие старые браузеры, если вы используете его как есть без транспиляции . Если вы хотите кросс-браузерную версию:

var data = {"result":[{"name":"2015.494782.1981AugustSapthagirikannada.gif","source":"derivative","format":"Animated GIF","original":"2015.494782.1981AugustSapthagirikannada_jp2.zip","mtime":"1490522158","size":"270516","md5":"5f0758aaef567d76916620f2ed568cb9","crc32":"f70dda86","sha1":"99c63d12e5d8c115a66d51715d998cd2534254a1"},{"name":"2015.494782.1981AugustSapthagirikannada.pdf","source":"original","mtime":"1484723772","size":"7488708","md5":"eecd0d8ae44a69fa0b398f8e00dda573","crc32":"f06bf0f0","sha1":"f00af63426b93a9587b0b59b20cc4beb79482243","format":"Image Container PDF"}]};
// Will return the first it finds
console.log(
  data.result.find(function(file) {
    return file.name.slice(-4) === '.pdf';
  }).name
);
// Will return an Array with all PDF file names
console.log(
  data.result.filter(function(file) {
    return file.name.slice(-4) === '.pdf';
  }).map(function(file) {
    return file.name
  })
);
...