【问题标题】:Why is my javascript function not returning true? [duplicate]为什么我的 javascript 函数没有返回 true? [复制]
【发布时间】:2016-02-20 18:07:51
【问题描述】:

我有一个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。在我的第二个代码块中,我有另一个控制台日志;总是记录错误。

我错过了什么?

【问题讨论】:

  • 您只能从关闭中返回。即forEach。您的外部函数仅返回 false,这就是您所看到的
  • 您只在 forEach() 函数内返回 true。你想知道的函数总是返回 false

标签: javascript


【解决方案1】:

请改成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;
    });
}

【讨论】:

  • 啊,是的 some 是我要找的,但我永远记不起 JS 高阶函数名称。
【解决方案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);
}

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      您的return true 返回传递给forEach 的函数,而不是isInSupplier。相反,您可以使用findIndex:

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

      或者真的可能更好地使用some,就像 Nina 的回答一样(我不记得这个名字,所以求助于findIndex)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-08-15
        • 2020-02-04
        • 2021-11-10
        • 2021-08-20
        • 2014-12-20
        • 2012-09-07
        相关资源
        最近更新 更多