Как найти свойство в массиве объектов и прекратить цикл

У меня есть массив объектов

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.

используйте some, чтобы остановить цикл, как только элемент будет найден

Chris G 30.08.2024 14:09
break; нормально работает в обычном цикле, есть ли причина не использовать его?
David 30.08.2024 14:09

Этот вопрос похож на: Найти объект по идентификатору в массиве объектов JavaScript. Если вы считаете, что это другое, отредактируйте вопрос, поясните, чем он отличается и/или как ответы на этот вопрос не помогают решить вашу проблему. Принятый ответ содержит условие, проверяющее определенный идентификатор. Вы можете заменить это состояние своим состоянием.

jabaa 30.08.2024 14:10
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
3
77
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете использовать другой цикл методов, поскольку форма объекта относительно проста и существует множество способов просмотра свойств.

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). Описание не имеет особого смысла. Что такое «цикл другого метода»? Как это связано с тем, что форма объекта относительно проста. Какое это имеет отношение к просмотру недвижимости? Также, пожалуйста, прочитайте Как ответить «избегайте попыток ответить на вопросы, которые... уже задавались и на которые давались ответы уже много раз».
jabaa 30.08.2024 14:33
Ответ принят как подходящий
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). Также, пожалуйста, прочитайте Как ответить «избегайте попыток ответить на вопросы, которые... уже задавались и на которые давались ответы уже много раз».
jabaa 30.08.2024 14:20

Нет необходимости зацикливаться. Используйте 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). Также, пожалуйста, прочитайте Как ответить «избегайте попыток ответить на вопросы, которые... уже задавались и на которые давались ответы уже много раз».

jabaa 30.08.2024 17:39

Другие вопросы по теме