Только ES5: возвращаемое значение, если найдено совпадение после итерации по различным значениям в массиве

Я пишу функцию для возврата id на основе нескольких различных вещей выравнивания. Код в основном работает, за исключением того, что нет break; для forEach . Я считаю, что мне нужно использовать другой фильтр или найти параметр в массиве.

function getDefaultId(prod) {
    var defaultId;

    prod.images.forEach( function(image) {
        defaultId = image.isPrimary ? image.id : undefined;
    });

    return defaultId;
}

var prod.images = [
    0: {
        isPrimary: false,
        id: 1234
    },
    1: {
       isPrimary: true,
       id: 1235
    },
    2: {
        isPrimary: false,
        id: 1236
    }
]

По сути, я пытаюсь вернуть соответствующий id для isPrimary . Результат должен быть 1236 но я получаю undefined потому что forEach не ломается и, таким образом, сбрасывает переменную в undefined на следующей итерации.

Всего 4 ответа


Вы можете использовать Array#some и выйти рано.

 function getDefaultId(prod) { var defaultId; prod.images.some(function (image) { if (image.isPrimary) { defaultId = image.id; return true; } }); return defaultId; } var prod = { images: [{ isPrimary: false, id: 1234 }, { isPrimary: true, id: 1235 }, { isPrimary: false, id: 1236 } ]}; console.log(getDefaultId(prod)); 


 var images = [ { isPrimary: false, id: 1234 }, { isPrimary: true, id: 1235 }, { isPrimary: false, id: 1236 } ] let result = images.filter(img => img.isPrimary === true) console.log(result) 


Вы можете использовать .filter() и получить массив объектов, для которых isPrimary имеет isPrimary true, а затем вернуть id первого найденного элемента следующим образом:

 function getDefaultId(prod) { var primaryImg = prod.images.filter(function(img) { return img.isPrimary; }); return primaryImg[0].id; } var prod = {}; prod.images = [{isPrimary: false, id: 1234 }, {isPrimary: true, id: 1235}, {isPrimary: false, id: 1236}]; console.log(getDefaultId(prod)); 


Попробуйте использовать map .

var images = [
    {
        isPrimary: false,
        id: 1234
    },
    {
       isPrimary: true,
       id: 1235
    },
    {
        isPrimary: false,
        id: 1236
    }
];

function getDefaultId() {
  var defaultId;
  images.map(function (image) {
    if (image.isPrimary) {
      defaultId = image.id;
    }
  });
  return defaultId;
}

console.log(getDefaultId());