Быстрый способ сделать это - перебирать свойства и последовательно обращаться к внутренним объектам, вы можете сделать это, используя Array.reduce()
или цикл for:
const get = (obj, props) => props.reduce((out, p) => out && out[p] || undefined, obj);
const obj = { a: { b: { c: 5 } } };
console.log(get(obj, ['a', 'b', 'c']));
console.log(get(obj, ['a', 'b', 'c', 'd', 'e']));
Или, вы можете оценить выражение, используя eval()
, однако, это, вероятно, самый медленный способ сделать это, Я не рекомендую его :
const get = (obj, props) => {
try {
return eval(`obj.${props.join('.')}`);
} catch {
return undefined;
}
}
const obj = { a: { b: { c: 5 } } };
console.log(get(obj, ['a', 'b', 'c']));
console.log(get(obj, ['a', 'b', 'c', 'd', 'e']));
Вы ищете что-то вроде следующего:
select group_concat(animal) from animals;
Это вернет что-то вроде следующего:
dog,cat,rat,mice,mouse
Если вы не хотите использовать запятую в качестве разделителя, вы можете добавить свой собственный разделитель в качестве второго параметр:
select group_concat(animal, '_') from animals;
, который вернет:
dog_cat_rat_mice_mouse
Я думаю, что это будет полезно:
group_concat(X)
group_concat(X,Y)
group_concat () функция возвращает строку, которая является конкатенацией всех ненулевых значений X. Если параметр Y присутствует тогда, он используется в качестве разделителя между экземплярами X. Запятая ("") используется в качестве разделителя, если Y опущен. Порядок связанных элементов произволен.