Почему не получается задать значение значение по умолчанию не существующему свойству объекта?

Если не существует свойства задать значение по умолчанию, не срабатывает.
getValue(objectValues, valueString, defaultV = '') {
    const valueArray = valueString.split('.');

    if (
      objectValues.hasOwnProperty(valueArray[0]) &&
      valueArray.length === 1
    ) {
      return objectValues[valueArray[0]];
    } else if (objectValues.hasOwnProperty(valueArray[0])) {
      return this.getValue(objectValues[valueArray[0]], valueArray.slice(1).join('.'));
    } else {
      objectValues[valueArray[0]] = defaultV;
      return objectValues;
    }
  }

  getValue({a: {b: 1111}}, 'a.c', 7)
  • Вопрос задан
  • 42 просмотра
Решения вопроса 3
RAX7
@RAX7
return this.getValue(objectValues[valueArray[0]], valueArray.slice(1).join('.'), defaultV);
//                                                                                ^^^^^^
Ответ написан
Комментировать
john36allTa
@john36allTa
alien glow of a dirty mind
Перегружено мне кажется, вот навскидку без проверок:
function getValue(objectValues, valueString, defaultV = '') {
	let current = objectValues;
	for (let key of valueString.split('.')){
		if (Object.prototype.toString.call(current) === '[object Object]' && key in current) {
			current = current[key]
		} else return defaultV
	}
	return current
}


oneline

const getValue = (objectValues, valueString = '', defaultV = '') => valueString.split('.').reduce((value, key) => value.hasOwnProperty(key) ? value[key] : defaultV, objectValues);
Ответ написан
Комментировать
@MikUrrey
Похоже, это из-за того, что вы не передаете defaultV третьим аргументом здесь:
return this.getValue(objectValues[valueArray[0]], valueArray.slice(1).join('.'));
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы