Я создаю функцию, более похожую на substr, и используя идею @Dave.
function substr_full_word($str, $start, $end){
$pos_ini = ($start == 0) ? $start : stripos(substr($str, $start, $end), ' ') + $start;
if(strlen($str) > $end){ $pos_end = strrpos(substr($str, 0, ($end + 1)), ' '); } // IF STRING SIZE IS LESSER THAN END
if(empty($pos_end)){ $pos_end = $end; } // FALLBACK
return substr($str, $pos_ini, $pos_end);
}
Ps .: Полное сокращение длины может быть меньше, чем substr.
Глядя на таблицу данных, я предполагаю, что вы получаете данные примерно так
const places = {
user1Uid: {
name: 'av',
latitude: '1000',
longitude: '1000'
},
user2Uid: {
name: 'we',
latitude: '1000',
longitude: '1000'
}
}
Если это так, вы можете манипулировать данными, используя Array.forEach
, for in
или даже с Array.reduce
, например с
const obj = {};
Object.keys(places).forEach(item => {
obj[places[item].name] = {
latitude: places[item].latitude,
longitude: places[item].longitude
}
});
console.log(obj);
или если вы хотите использовать уменьшение,
const newObj = Object.keys(places).reduce((accumulator, item) => Object.assign({
[places[item].name]: {
latitude: places[item].latitude,
longitude: places[item].longitude
}
}, accumulator), {});
console.log(newObj);
Вы получите объект в консоли, как
{
"we": {
"latitude": "1000",
"longitude": "1000"
},
"av": {
"latitude": "1000",
"longitude": "1000"
}
}
[ 1112] Если вы хотите узнать больше о Reduce, вот ссылка
Happy coding:)