Вы можете использовать find .
Метод find выполняет функцию обратного вызова один раз для каждого индекса массива, пока не найдет метод, в котором callback возвращает истинное значение.Если такой элемент найден, find немедленно возвращает значение этого элемента.В противном случае функция find возвращает значение undefined.
Таким образом, это более эффективно с точки зрения памяти, чем циклический цикл по всему объекту с помощью forEach , поскольку функция find возвращает немедленно, если функция обратного вызова находит значение.Разорвать цикл forEach невозможно.В документации:
Нет способа остановить или прервать цикл forEach (), кроме как с помощью исключения.Если вам нужно такое поведение, метод forEach () является неправильным инструментом.
1.Если вы хотите получить весь объект
var nameTest = 'testName';
var test = {
RANDOM_ONE: {
NAME: 'testName',
SOMETHING: {}
},
RANDOM_TWO: {
NAME: 'Name',
SOMETHING: {}
}
};
function getObjectByNameProperty(object, property) {
var objectKey = Object.keys(object)
.find(key => object[key].NAME === property);
return object[objectKey];
}
var object = getObjectByNameProperty(test, nameTest);
console.log(object);
2.Если вы просто хотите проверить, имеет ли объект заданное значение имени
var nameTest = 'testName';
var test = {
RANDOM_ONE: {
NAME: 'testName',
SOMETHING: {}
},
RANDOM_TWO: {
NAME: 'Name',
SOMETHING: {}
}
};
function doesObjectHaveGivenName(object, nameValue) {
var objectKey = Object.keys(object)
.find(key => object[key].NAME === nameValue);
return objectKey ? true : false;
}
console.log( doesObjectHaveGivenName(test, nameTest) );