仅限ES5:在对数组中的各个值进行迭代之后找到匹配项时返回值

时间:2019-05-17 13:25:12

标签: javascript arrays foreach ecmascript-5

我正在编写一个函数,该函数根据对齐的各种情况返回一个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 个答案:

答案 0 :(得分: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));

答案 1 :(得分:0)

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)

答案 2 :(得分:0)

您可以使用.filter()并获取具有isPrimary为真的对象数组,然后返回找到的第一项的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));

答案 3 :(得分:0)

尝试使用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());