使用函数“some”比较两个属性

var e = require("./myApp.js"); var myServer = e.CreateServer(1337); myServer.Register("/", "GET", function (req, res) { res.end("J") }); myServer.Register("/", "GET", function (req, res) { res.end("Ja") }); myServer.Start(); 

这是我的“包装”:

 module.exports = (function () { function _createServer(port) { var routingTable = []; var port = port; var server = require('http').createServer(); function _start() { server.listen(port); console.log("Server was started"); }; function RegisterRecord(url, method, fnc) { this.url = url; this.method = method; this.fnc = fnc; }; function _register(newUrl, newMethod, newFnc) { if (_checkInput(newUrl, newMethod)) console.log("Register failed! Record with same URL and Method already exist"); else { routingTable.push(new RegisterRecord(newUrl, newMethod, newFnc)); console.log("Register success!"); } }; function _checkInput(newUrl, newMethod) { return routingTable.some(function fnc(record) { record.url == newUrl && record.method == newMethod }); }; return { Start: _start, Register: _register, ShutDown: _shutDown }; }; return { CreateServer: _createServer }; })(); 

所以最重要的function是“_register”和“checkInput”。

我的目标是只有在数组路由表中允许相同的URL和方法。 所以当我执行程序时,Command Promp会打印两次注册成功。 但是“/”和“GET”应该只允许一次。

我怎样才能比较的URL和方法,使他们可以是唯一的?

PS:“包装”是在JS文件“./MyApp.js”

你需要filter

 function _checkInput(newUrl, newMethod) { return routingTable .filter( function(el) { return el.url === newUrl && el.method === newMethod; }) .length > 0; }; 

UPD。 当然,你可以使用some – 你忘了从中返回一个值:

 function _checkInput(newUrl, newMethod) { return routingTable .some( function(el) { // Need return return el.url === newUrl && el.method === newMethod; }) };