У вас есть несколько способов получить значение через lodash
.Все они действительны:
const tempObject = { li: { nestedLi: [1, 2] } };
console.log(_.get(tempObject, 'li.nestedLi.0')) // dot
console.log(_.get(tempObject, 'li.nestedLi[0]')) // bracket
console.log(_.get(tempObject, ['li', 'nestedLi', '0'])) // array
console.log(_.result(tempObject, 'li.nestedLi.0'))
console.log(_.result(tempObject, 'li.nestedLi[0]'))
console.log(_.result(tempObject, ['li', 'nestedLi', '0']))
Различия в производительности между методами _.get
незначительны.
Это базовая реализация _.get :
function baseGet(object, path) {
path = castPath(path, object);
var index = 0,
length = path.length;
while (object != null && index < length) {
object = object[toKey(path[index++])];
}
return (index && index == length) ? object : undefined;
}
, которая в основном преобразует путь в массив, а затем использует while
для обхода пути.Так что на самом деле вы могли бы сказать, что использование записи массива сэкономит вам время, поскольку castPath
не нужно cast
it:)
Это castPath :
function castPath(value, object) {
if (isArray(value)) {
return value;
}
return isKey(value, object) ? [value] : stringToPath(toString(value));
}
_.result
пройдёт путь и проверит, есть ли функции среди пути, и если они есть, он выполнит их и продолжит движение.Весьма удобно в сценариях с нокаутом, поскольку это спасает вас от привычных ko.unwrap
и т. Д.