为什么我的javascript函数没有返回true?

时间:2016-02-20 18:07:52

标签: javascript

我有一个javascript函数:

function isInSupplier(idsupplier) {
    suppliers.forEach(function(object) {
        if (object._id == idsupplier) {
            console.log("TRUE");
            return true;
        };
    });
    return false;

我有一份产品清单,每个都有供应商。我想列出一个独特的供应商列表,因此供应商已经在我的供应商列表中,我不会添加新的供应商。

这是我的职责:

    console.log(isInSupplier(('<s:property value="supplier.id" />')));
    if (!isInSupplier(('<s:property value="supplier.id" />'))) {
        suppliers.push(new supplier(
                ('<s:property value="supplier.id" />'),
                ('<s:property value="supplier.supplier_name" />'),
                ('<s:property value="supplier.type" />'),
                ('<s:property value="supplier.phone" />')
        ));
    }

还有一些我不明白的事情:即使控制台正确记录“TRUE”,该功能也不会返回true。在我的第二个代码块中,我有另一个控制台日志;总是记录错误。

我错过了什么?

4 个答案:

答案 0 :(得分:5)

请将其更改为Array.prototype.some()

  

some()方法测试数组中的某个元素是否通过了由提供的函数实现的测试。

function isInSupplier(idsupplier) {
    return suppliers.some(function(object) {
        if (object._id == idsupplier) {
            console.log("TRUE");
            return true;
        };
    });
}

或没有控制台输出

function isInSupplier(idsupplier) {
    return suppliers.some(function(object) {
        return object._id == idsupplier;
    });
}

答案 1 :(得分:2)

forEach方法将函数作为参数。如果你在里面返回,你将不会从外部功能返回。您可以使用Array.prototype.some使其正常工作:

function isInSupplier(idsupplier) {
    return suppliers.some(function (object) {
        return object._id == idsupplier;
    });
}

如果您的环境支持ES6,您可以使用箭头功能:

function isInSupplier(idsupplier) {
    return suppliers.some(o => o._id == idsupplier);
}

答案 2 :(得分:1)

您从传递给forEach的函数返回true,而不是从isInSupplier返回。

答案 3 :(得分:1)

您的return true会将传递给forEach的函数返回给isInSupplier。相反,您可以使用findIndex

function isInSupplier(idsupplier) {
  var index = suppliers.findIndex(function(object) {
    return object._id == idsupplier;
  });
  return index != -1
}

或者在Nina的答案中使用some可能更好(我记不起这个名字是findIndex)。