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