回调找不到工作-Javascript

时间:2016-11-22 07:10:40

标签: javascript find javascript-objects

我为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)




我添加了一个正在运行的代码段,任何建议都会有所帮助。 也许我错过了一些小事

2 个答案:

答案 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)