#javascript #json #find
#javascript #json #Найти
Вопрос:
Мне нужно выполнить поиск и вернуть дочерние элементы объекта json, следуя значению дочерних элементов json.
вот рабочий код, который я написал (верните нужный объект):
const sites = [
{
name: "Lightinthebox WW",
site_url: "https://lightinthebox.com/",
domain: "lightinthebox.com",
},
{
name: "Aliexpress WW",
site_url: "https://aliexpress.com/",
domain: "aliexpress.com",
},
{
name: "Dx WW",
site_url: "http://dx.com/",
domain: "dx.com",
}
];
var site = "aliexpress.com";
const foundSite = sites.find(s => site.includes(s.domain));
//return: {name: "Aliexpress WW", site_url: "https://aliexpress.com/", domain: "aliexpress.com"}
теперь у меня есть другой JSON:
const sites = {"All":{"5631":{"id":5631,"name":"Lightinthebox WW","site_url":"https://lightinthebox.com/","domain":"lightinthebox.com"},"6115":{"id":6115,"name":"Aliexpress WW","site_url":"https://aliexpress.com/","domain":"aliexpress.com"},"7077":{"id":7077,"name":"Dx WW","site_url":"http://dx.com/","domain":"dx.com","13318":{"id":13318,"name":"GearBest WW","site_url":"https://gearbest.com/","domain":"gearbest.com"}}};
Я попытался сделать то же самое, и у меня есть «сайты.find — это не функция »
Можете ли вы понять, почему? Попытался найти способ вернуть нужный объект (поиск домена: «aliexpress.com » затем верните все объекты «{«id»: 6115,»name»:»Aliexpress WW»,»site_url»:»https://aliexpress.com /»,»домен»:»aliexpress.com «}»)
Спасибо
Комментарии:
1. Не существует такого понятия, как объект JSON. JSON — это строковый формат. Как только вы проанализируете его обратно в объект с
JSON.parse()
помощью, у вас просто будет обычный старый объект.2. Это объект JSON, его не нужно анализировать, поскольку это не строка, чего мне не хватает?
3. Опять же, не существует такого понятия, как объект JSON. JSON — это строка, объект — это объект.
4. Ваша проблема просто в том, что
.find()
это метод массива, и поэтому ваш первый пример работает. Но ваш второй пример — это объект, а у объектов нет.find()
метода.
Ответ №1:
Array.prototype.find()
это метод массива, который доступен sites
в вашем первом примере, потому что это массив, но во второй попытке вы пытаетесь вызвать его для объекта.
В этом случае вы можете использовать Object.values()
для возврата массива объектов значений в All
свойстве объекта верхнего уровня и использовать .find()
его.
(это не связано с JSON, но знание методов, доступных для класса, с которым вы имеете дело; в данном случае Array vs Object)
const sites = {
"All": {
"5631": {
"id": 5631, "name": "Lightinthebox WW", "site_url": "https://lightinthebox.com/", "domain": "lightinthebox.com"
},
"6115": {
"id": 6115, "name": "Aliexpress WW", "site_url": "https://aliexpress.com/", "domain": "aliexpress.com"
},
"7077": {
"id": 7077, "name": "Dx WW", "site_url": "http://dx.com/", "domain": "dx.com"
},
"13318": {
"id": 13318, "name": "GearBest WW", "site_url": "https://gearbest.com/", "domain": "gearbest.com"
}
}
};
const site = "aliexpress.com";
const foundSite = Object.values(sites.All).find(s => site.includes(s.domain));
console.log(foundSite);