我是一個(gè)初學(xué)者,正在嘗試重寫下劃線函數(shù)_.invoke
。
我正在嘗試創(chuàng)建該函數(shù),以便它返回一個(gè)數(shù)組,其中包含對(duì)集合中的每個(gè)值調(diào)用該方法的結(jié)果。
_.invoke = function(collection, methodName) { var result = []; if (Array.isArray(collection)) { for (let i = 0; i < collection.length; i++) { methodName.call(collection[i]) var value = collection[i][methodName] result.push(value) } } return result }
我認(rèn)為我的問(wèn)題出在這一行:
methodName.call(collection[i])
- 想呼叫物件collection[i]
上的方法,但我想傳遞一些參數(shù)(如果它們包含在單元測(cè)試中)。
到目前為止,我已經(jīng)嘗試使用測(cè)試: typeof(methodName) === "function"
並編寫一個(gè)函數(shù)來(lái)測(cè)試該方法是否是一個(gè)函數(shù)。
在這裡您可以使用參數(shù)來(lái)呼叫。
_.invoke = function(collection, methodName, ...args) { if (!Array.isArray(collection)) { return []; } const out = []; for(const item of collection){ if(typeof item[methodName] === 'function') out.push(item[methodName].apply(item, args)); } } return out; }
要測(cè)試所有項(xiàng)目都有一個(gè)方法:
const collection = [...]; const allHaveMethod = _.invoke(collection, 'method', 'arg1', 'arg2').length === collection.length;
你的意思是這樣的嗎?
const myArr = [ { cons:function(args) { return args } }, { cons:function(args) { return args["bla"] } }, ] const _ = {}; _.invoke = (collection, methodName, ...args) => !Array.isArray(collection) ? [] : collection .filter(item => typeof item[methodName] === 'function') .map(item => item[methodName].apply(item, args)); const res = _.invoke(myArr,"cons",{"bla":"hello"}) console.log(res)