2016-11-22 52 views
2

我写了一个自定义的回调函数JavaScript的查找功能 但总是产生undefined回调找工作不JavaScript的

var objectsArray = [ 
 
    { 'a': 1, 'b': 2, 'c': 3 }, 
 
    { 'a': 41, 'b': 5, 'c': 7 }, 
 
    { 'a': 9, 'b': 2, 'c': 3 }, 
 
    { 'a': 4, 'b': 5, 'c': 99 } 
 
]; 
 

 
function mytestMatchesProp(inputKey,val){ 
 
    let matchFunc = function(element,index,array){ 
 
     Object.keys(element).every(function(key){ 
 
      let val1 = (key==inputKey) && (element[key] == val) 
 
      return val1 
 
     }) 
 
    } 
 
    return matchFunc 
 
} 
 

 
let res = objectsArray.find(mytestMatchesProp('a',9)) 
 
console.log('output',res)

我加入了一个正在运行的代码段,任何建议会有帮助。 也许我失去了一些东西未成年

回答

2

您需要更改everysome为先,因为每一个将始终返回false,并返回Object.keys(element).some...结果。并且可以简化。

但我可以建议你更简单的代码,你只需要检查,如果该属性是在对象和它的值是val,使用lambdas

var objectsArray = [ 
 
    { 'a': 1, 'b': 2, 'c': 3 }, 
 
    { 'a': 41, 'b': 5, 'c': 7 }, 
 
    { 'a': 9, 'b': 2, 'c': 3 }, 
 
    { 'a': 4, 'b': 5, 'c': 99 } 
 
]; 
 

 
function mytestMatchesProp(inputKey,val){ 
 
    return (element,index,array) => inputKey in element && element[inputKey] === val; 
 
} 
 

 
let res = objectsArray.find(mytestMatchesProp('a',9)) 
 
console.log('output',res)

+0

感谢您的解释 –

4

你可以只需使用正确的检查返回回调函数而无需重复迭代。

var objectsArray = [ 
 
    { 'a': 1, 'b': 2, 'c': 3 }, 
 
    { 'a': 41, 'b': 5, 'c': 7 }, 
 
    { 'a': 9, 'b': 2, 'c': 3 }, 
 
    { 'a': 4, 'b': 5, 'c': 99 } 
 
]; 
 

 
function mytestMatchesProp(inputKey, val){ 
 
    return function(element, index, array){ 
 
     return inputKey in element && element[inputKey] === val; 
 
    }; 
 
} 
 

 
let res = objectsArray.find(mytestMatchesProp('a', 9)); 
 
console.log('output', res);