Как отделить идентификатор слоя от URL-адреса и соединить запятой

У меня есть набор объектов, содержащих url, name и address, где я хочу получить id из url и соединить их запятой.

let arrayOfObjects = [ 
  { url: 'http://localhost:3000/redApi?id=001&name=abc&[email protected]' }
  { url: 'http://localhost:3000/redApi?id=002&name=xyz&[email protected]' }
  { url: 'http://localhost:3000/redApi?id=undefined&name=pqr&[email protected]' }
]

Также, если есть «неопределенное», я хочу передать его пустым.

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

001,002,

Вот мой код

let arrayOfObjects = [ 
  { url: 'http://localhost:3000/redApi?id=001&name=abc&[email protected]' }
  { url: 'http://localhost:3000/redApi?id=002&name=xyz&[email protected]' }
  { url: 'http://localhost:3000/redApi?id=undefined&name=pqr&[email protected]' }
]

let urlId = arrayOfObjects.map(x=> x.url)
let getUrl = new URLSearchParams("?" + urlId?.url?.split("?")[1])
let dataId = getUrl.get('id')
     
console.info(dataId)

Я бы дважды разделил каждый элемент массива с помощью id=, чтобы взять второй элемент, а затем с помощью & и взять первый элемент.

Alvi15 02.02.2023 11:04

@ Alvi15, не могли бы вы помочь мне с кодом, спасибо.

Solid_layout 02.02.2023 11:09

Ваш urlId представляет собой массив URL-адресов. Вы относитесь к нему как к одной строке. Извлеките параметр строки запроса из обратного вызова .map(), чтобы он возвращал массив параметров. Также не нужно разбивать вопросительный знак самостоятельно. Просто используйте new URL(x.url).searchParams.get('id')

Ivar 02.02.2023 11:10

@Ivar, не могли бы вы помочь мне с кодом, спасибо

Solid_layout 02.02.2023 11:12

Я бы попросил вас попробовать то, что я предложил, а затем отредактировать вашу попытку.

Alvi15 02.02.2023 11:13
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
5
77
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Вы неправильно используете URLSearchParams, посмотрите документацию: https://medium.com/swlh/urlsearchparams-in-javascript-df524f705317

Сначала вам нужно преобразовать URL-адрес в фактические объекты URL:

let urlId = arrayOfObjects.map(x=> new URL(x.url))

Затем вы можете получить параметры следующим образом:

  urlId.forEach(u => console.info(new URLSearchParams(u).get('id')))

Я также заметил, что вы используете массив как строку при попытке получить идентификатор.

Если вы предпочитаете однострочный:

let theIDs = arrayOfObjects
 .map(x => new URLSearchParams(x.url.split('?')[1])
 .get('id'))
 .filter(x => x!=='undefined')
 .join(',');

Попробуй это:

    let arrayOfId = arrayOfObjects.map((obj) => {
        let url = obj.url;
        let id = url.split(" = ")[1];
        if (id.includes("&")){
            id = id.split("&")[0];
        }
        if (id == "undefined") {
            id = "";
        }
        return id;
    });
     
    console.info(arrayOfId);
Ответ принят как подходящий

Сначала вы можете сопоставить каждый элемент массива с параметром. Вы можете использовать URL() , чтобы легко получить searchParams из URL-адреса.

let urlIds = arrayOfObjects.map(x => new URL(x.url).searchParams.get('id'));

Теперь urlIds представляет собой массив параметров строки запроса id для каждого URL-адреса в массиве arrayOfObjects.

Значения параметров строки запроса всегда являются строками. Там нет такой вещи, как undefined. Если вы хотите рассматривать «undefined» как пустое, вы можете изменить .map() выше или просто использовать отдельный .map(), сделайте это. Я считаю, что последний чище.

urlIds = urlIds.map(value => value === "undefined" ? "" : value);

Затем, наконец, если вы хотите, чтобы они были соединены вместе через запятую, используйте метод .join(). Таким образом, весь код будет таким:

 let arrayOfObjects = [ 
  { url: 'http://localhost:3000/redApi?id=001&name=abc&[email protected]' },
  { url: 'http://localhost:3000/redApi?id=002&name=xyz&[email protected]' },
  { url: 'http://localhost:3000/redApi?id=undefined&name=pqr&[email protected]' }
];

let urlIds = arrayOfObjects.map(x => new URL(x.url).searchParams.get('id'));
urlIds = urlIds.map(value => value === "undefined" ? "" : value);

let joinedUrlIds = urlIds.join(',');

console.info(joinedUrlIds);

Вот проверь, все работает.

let arrayOfObjects = [ 
        {url:'http://localhost:3000/redApi?id=001&name=abc&[email protected]'},
        {url:'http://localhost:3000/redApi?id=002&name=xyz&[email protected]'},
        {url:'http://localhost:3000/redApi?id=undefined&name=pqr&[email protected]'}
        ];
let urlId = arrayOfObjects.map((x)=>{ if ( !isNaN(Number(x.url.slice(x.url.indexOf("?")+4,
x.url.indexOf("?")+5))) )
{ return x.url.slice(x.url.indexOf("?")+4, x.url.indexOf("&"))  }
       else {return ""} 
});
       console.info(urlId)

Но если вы именно хотели использовать URLSearchParams, я могу сделать это и с этим

Другие вопросы по теме