Это мое решение:
function resolve(path, obj) {
return path.split('.').reduce(function(prev, curr) {
return prev ? prev[curr] : null
}, obj || self)
}
Примеры использования:
resolve("document.body.style.width")
// or
resolve("style.width", document.body)
// or even use array indexes
// (someObject has been defined in the question)
resolve("part.0.size", someObject)
// returns null when intermediate properties are not defined:
resolve('properties.that.do.not.exist', {hello:'world'})
Вам необходимо использовать std :: back_inserter .
#include <iterator>
std::copy_if(buffer1.begin(), buffer1.end(), back_inserter(buffer2), [](char c){
//don't copy spaces
return c != ' ';
});
back_inserter(buffer2)
возвращает специализированный итератор, который добавляет вместо того, чтобы перезаписывать элементы buffer2
.
Чтобы это работало правильно, вам нужно убедиться, что вы начинаете с пустого buffer2
. то есть не использовать:
buffer2.resize(buffer1.length());