У меня есть массив объектов
const jobs = [
{ "id": 1,
"title": "Item 1",
"Invoice Net": "€120.00",
"Invoice VAT": "€0.00",
"Invoice Total": "€120.00"
},
{ "id": 2,
"title": "Item 2",
},
{ "id": 3,
"title": "Item 1",
"Invoice Net": "€200.00",
"Invoice VAT": "€20.00",
"Invoice Total": "€240.00"
},
];
Я хочу просмотреть массив, а затем просмотреть его объекты, чтобы найти первый существующий ключ «Сеть счетов-фактур». Когда ключ найден, я хочу передать его значение в переменную и прекратить цикл.
Мое решение на данный момент
let passedValue = null;
jobs.forEach((job) => {
if ('Invoice Net' in job){
passedValue = job['Invoice Net'];
}
break;
})
Очевидно, это не работает, поскольку оператор Break не разрешен в цикле forEach.
break;
нормально работает в обычном цикле, есть ли причина не использовать его?
Этот вопрос похож на: Найти объект по идентификатору в массиве объектов JavaScript. Если вы считаете, что это другое, отредактируйте вопрос, поясните, чем он отличается и/или как ответы на этот вопрос не помогают решить вашу проблему. Принятый ответ содержит условие, проверяющее определенный идентификатор. Вы можете заменить это состояние своим состоянием.
Вы можете использовать другой цикл методов, поскольку форма объекта относительно проста и существует множество способов просмотра свойств.
const jobs = [
{ "id": 1,
"title": "Item 1",
"Invoice Net": "€120.00",
"Invoice VAT": "€0.00",
"Invoice Total": "€120.00"
},
{ "id": 2,
"title": "Item 2",
},
{ "id": 3,
"title": "Item 1",
"Invoice Net": "€200.00",
"Invoice VAT": "€20.00",
"Invoice Total": "€240.00"
},
];
let passedValue = null;
for(let i=0;i<jobs.length;i++){
if (jobs[i].hasOwnProperty('Invoice Net')){
//if (jobs[i]['Invoice Net']){
passedValue = jobs[i]['Invoice Net'];
break;
}
}
console.info(passedValue); // €120.00
if (jobs[i].hasOwnProperty('Invoice Net'))
— это не то же самое, что if ('Invoice Net' in job)
. Описание не имеет особого смысла. Что такое «цикл другого метода»? Как это связано с тем, что форма объекта относительно проста. Какое это имеет отношение к просмотру недвижимости? Также, пожалуйста, прочитайте Как ответить «избегайте попыток ответить на вопросы, которые... уже задавались и на которые давались ответы уже много раз».
const jobs = [
{ "id": 1, "title": "Item 1", "Invoice Net": "€120.00", "Invoice VAT": "€0.00", "Invoice Total": "€120.00" },
{ "id": 2, "title": "Item 2" },
{ "id": 3, "title": "Item 1", "Invoice Net": "€200.00", "Invoice VAT": "€20.00", "Invoice Total": "€240.00" }
];
let invoiceNetValue;
for (const job of jobs) {
if (job["Invoice Net"] !== undefined) {
invoiceNetValue = job["Invoice Net"];
break; // Exit the loop once the first "Invoice Net" is found
}
}
console.info(invoiceNetValue); // Output: "€120.00"
if (job["Invoice Net"] !== undefined)
— это не то же самое, что if ('Invoice Net' in job)
. Также, пожалуйста, прочитайте Как ответить «избегайте попыток ответить на вопросы, которые... уже задавались и на которые давались ответы уже много раз».
Нет необходимости зацикливаться. Используйте Array#find
, как в демо ниже.
const jobs = [
{ "id": 1,
"title": "Item 1",
"Invoice Net": "€120.00",
"Invoice VAT": "€0.00",
"Invoice Total": "€120.00"
},
{ "id": 2,
"title": "Item 2",
},
{ "id": 3,
"title": "Item 1",
"Invoice Net": "€200.00",
"Invoice VAT": "€20.00",
"Invoice Total": "€240.00"
},
{ "id": 4,
"title": "Item 1",
"Invoice Net": "€200.00",
"Invoice VAT": "€20.00",
"Invoice Total": "€240.00"
}];
const inet = jobs.find(a => a["Invoice Net"]);
console.info( inet["Invoice Net"] );
Почему вы называете forEach
циклом, а find
нет? a["Invoice Net"]
имеет другие результаты, чем if ('Invoice Net' in job)
. Также, пожалуйста, прочитайте Как ответить «избегайте попыток ответить на вопросы, которые... уже задавались и на которые давались ответы уже много раз».
используйте
some
, чтобы остановить цикл, как только элемент будет найден