我为Javascript的查找功能编写了一个自定义回调函数
但这总是让undefined
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)

我添加了一个正在运行的代码段,任何建议都会有所帮助。 也许我错过了一些小事
答案 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);
答案 1 :(得分:2)
您需要先将every
更改为some
,因为每个人都会返回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)