GOOGLE ADS

среда, 4 мая 2022 г.

построить строковые ключи и получить значение

Я пишу небольшой фрагмент js, который должен возвращать значения на основе ключей из объекта. Объект может быть даже вложенным, вот мой код.


let obj = {
"name": "Family",
"count": 6,
"children": {
"name": "Jim",
"age": "24",
"address": {
"street": "5th ave",
"state": "NY",
"country":"US"
}
},
"parents": {
"name": "John",
"age": "45",
"address": {
"street": "New brew st",
"state": "CA",
"country":null
}
}
};
const getData = (obj) => {
let jsonString = obj;
let keys = ["name", "count","children.address.street"];
let returnString = "";
keys.forEach((item) => {
returnString += buildString(item, jsonString) + "$$";
})
return returnString.replace(/(\$\$)*$/, "");
}
const buildString = (keyIn, data) => {
var value = '';
if (keyIn.includes('.'))
value = splitAndReturn(keyIn, data);
else
value = data[keyIn]? data[keyIn]: null;
return `${keyIn}###${value}`;
};
const splitAndReturn = (keyIn, obj) => {
let nKeyArr = keyIn.split('.');
let buildString = 'obj';
nKeyArr.forEach(item => {
buildString += `['${item}']`
});
let nKey = buildString;
return (nKey)
}
console.log(getData(obj));

Решение проблемы

Небольшая рекурсивная функция может позволить вам получить доступ к вложенным ключам вашего объекта.


function getValue(initialKey, obj) {
const [key,...rest] = initialKey.split(".");
if (obj[key] == null) {
return null;
}

if (rest.length) {
return getValue(rest.join("."), obj[key]);
}

return obj[key];
}
const data = {
name: 'Family',
count: 6,
children: {
name: 'Jim',
age: '24',
address: {
street: '5th ave',
state: 'NY',
country: 'US',
},
},
parents: {
name: 'John',
age: '45',
address: {
street: 'New brew st',
state: 'CA',
country: null,
},
},
};
console.log(getValue("children.name", data));
console.log(getValue("children.address.country", data));

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...