Только ES5: возвращаемое значение, если найдено совпадение после итерации по различным значениям в массиве - PullRequest
1 голос
/ 17 мая 2019

Я пишу функцию, которая возвращает 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 ]

4 голосов
/ 17 мая 2019

Вы можете использовать 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));
0 голосов
/ 17 мая 2019

Попробуйте, используя 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());
0 голосов
/ 17 мая 2019

Вы можете использовать .filter() и получить массив объектов, для которых 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));
0 голосов
/ 17 мая 2019

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...