У меня есть набор объектов, содержащих 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)@ Alvi15, не могли бы вы помочь мне с кодом, спасибо.
Ваш urlId представляет собой массив URL-адресов. Вы относитесь к нему как к одной строке. Извлеките параметр строки запроса из обратного вызова .map(), чтобы он возвращал массив параметров. Также не нужно разбивать вопросительный знак самостоятельно. Просто используйте new URL(x.url).searchParams.get('id')
@Ivar, не могли бы вы помочь мне с кодом, спасибо
Я бы попросил вас попробовать то, что я предложил, а затем отредактировать вашу попытку.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы неправильно используете 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, я могу сделать это и с этим
Я бы дважды разделил каждый элемент массива с помощью
id=, чтобы взять второй элемент, а затем с помощью&и взять первый элемент.