Как получить только первый объект, если 2 объекта совпадают с оператором if

1

const cars = [{
	brand: 'BMW',
	year: '1997'
}, {
	brand: 'BMW',
	year: '2011'
}]
Object.keys(cars).forEach(function(x) {
	if (cars[x].brand == "BMW") {
		console.log(cars[x]);
	}
});

Как мне console.log только первый объект массива соответствует бренду "BMW"? * Это должно быть решение с объектными ключами

  • 0
    cars это массив. Зачем вам использовать Object.keys() ? Оо
Теги:

5 ответов

0
Лучший ответ

Вы можете взять Array#some и если бренд найден, верните true - тогда итерация прекратится.

const cars = [{ brand: 'BMW', year: '1997' }, { brand: 'BMW', year: '2011' }];

Object.keys(cars).some(function(x) {
    if (cars[x].brand == "BMW") {
        console.log(cars[x]);
        return true;
    }
});
  • 0
    Это то, что я искал, ну так просто хех. Спасибо! :)
2

user array.find, он вернет только первый соответствующий элемент.

const cars = [{
	brand: 'BMW',
	year: '1997'
}, {
	brand: 'BMW',
	year: '2011'
}]

console.log(cars.find(car=>car.brand ==='BMW'));

РЕДАКТИРОВАТЬ

Поскольку вам нужно решение с Object.Keys, вы можете использовать array.some()

const cars = [{
	brand: 'BMW',
	year: '1997'
}, {
	brand: 'BMW',
	year: '2011'
}]

Object.keys(cars).some(function(ele) {
	if (cars[ele].brand == "BMW") {
        console.log(cars[ele]);
        return true;
	}
});
  • 0
    ОП сказал "Это должно быть решение с object.keys ()"
  • 0
    @AndrewLohr да обновляется, но я не уверен, зачем ОП это нужно :)
Показать ещё 1 комментарий
0

Вышеупомянутый ответ использования Array.prototype.find() определенно то, что вы ищете.

Однако, если вы столкнетесь с этой проблемой при других обстоятельствах: когда вы используете цикл for, и вы хотите закончить цикл раньше, вы можете использовать ключевое слово "break".

Ключевое слово break не работает с forEach, однако вы не должны использовать forEach в любом случае - он имеет меньшую поддержку браузера и медленнее, чем старомодный цикл.

  • 0
    Array.prototype.find() является решением, но вы советуете не использовать .forEach() из-за его поддержки браузера? .forEach() доступен в любом браузере, а .find() нет
  • 0
    Я на самом деле не знал, что найти не очень хорошо поддержали, так как я на самом деле не использую его. Я бы действительно посоветовал просто использовать цикл for и break, и только принял find, потому что другой пользователь уже упомянул об этом, и это точный метод для вопроса OP.
0

вы можете использовать Object.keys(cars).find(function) как Object.keys(cars).find(function) ниже:

const cars = [{
	brand: 'BMW',
	year: '1997'
}, {
	brand: 'BMW',
	year: '2011'
}]

Object.keys(cars).find(function(x) {
if (cars[x].brand == "BMW") {
    console.log(cars[x]);
    return true;
   }
});
0

это будет полезно для вас

var Exception = {};
const cars = [{
	brand: 'BMW',
	year: '1997'
}, {
	brand: 'BMW',
	year: '2011'
}]
try{
Object.keys(cars).forEach(function(x) {
	if (cars[x].brand == "BMW") {
		console.log(cars[x]);
        throw Exception;
	}
});
}catch(e){
   if (e !== Exception) throw e;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню