#javascript #javascript-objects #object-properties
Вопрос:
Вот моя структура:
var obj = {
apple: {
name: "Apple Juice",
description: "",
},
orange: {
name: "Orange Juice",
description: "",
}
}
Я хочу узнать описание apple
или orange
по его имени, не используя родителя ( obj.apple.description
)
Есть ли что-то вроде obj.apple.name.siblingProperty
того, чтобы получить ценность от description
использования name
?
Комментарии:
1. Пожалуйста, расскажите подробнее о своей проблеме. Я не совсем понимаю, о чем вы просите.
2. Нет, потому что это было бы ненадежно. Порядок свойств соответствует указанным правилам, но вы ничего не можете с ними поделать, поэтому в зависимости от порядка код будет чрезвычайно хрупким.
3.Это поможет, если вы объясните, почему
obj.apple.description
это нежелательно.4. Нет ничего подобного. Вы могли бы написать вспомогательную функцию для повторения свойств
obj.apple
, но любое решение будет хуже, чем просто выполнениеobj.apple.description
.
Ответ №1:
Вы можете просмотреть ключи объектов, найти индекс name
в этом объекте, а затем получить следующий индекс, чтобы получить description
:
var obj = {
apple: {
name: "Apple Juice",
description: "",
},
orange: {
name: "Orange Juice",
description: "",
}
}
function getNextKey(object, key) {
var keys = Object.keys(object);
var keyIndex = keys.indexOf(key);
var nextKey = keys[keyIndex 1];
console.log(nextKey ": " object[nextKey]);
}
getNextKey(obj.apple, "name");
getNextKey(obj.orange, "name");
Ответ №2:
Вы должны использовать прокси для своего объекта, а в обработчике просто используйте функцию get, и все.теперь вы можете делать все, что хотите. вот мой код
const obj = {
apple: {
name: 'Apple Juice',
description: 'apple selected',
},
orange: {
name: 'Orange Juice',
description: 'orange selected',
},
};
const handler = {
get: function (target, prop, receiver) {
return target[prop].description;
},
};
const proxy = new Proxy(obj, handler);
console.log(proxy.apple);
console.log(proxy.orange);