Javascript 使用Lodash\ux.find根据属性从数组中获取对象

Javascript 使用Lodash\ux.find根据属性从数组中获取对象,javascript,angularjs,arrays,lodash,Javascript,Angularjs,Arrays,Lodash,我有一个对象数组,比如memberToChange.checkbox:ICheckbox[]如下所示: 现在,我有一个变量,比如internalNumber:string,它的值为“3419”。我想从internalNumber与label属性匹配的对象数组中获取对象。最后,我想将该对象的value属性设置为true 我的代码是: let checkboxes = _.find(scope.selectedMembers, (member: IMember) => member.memb

我有一个对象数组,比如memberToChange.checkbox:ICheckbox[]如下所示:

现在,我有一个变量,比如internalNumber:string,它的值为“3419”。我想从internalNumber与label属性匹配的对象数组中获取对象。最后,我想将该对象的value属性设置为true

我的代码是:

let checkboxes = _.find(scope.selectedMembers, (member: IMember) => member.member.uuid === memberId).checkboxes;     //gives me array of checkboxes.  
let checkboxToChange = _.find(memberToChange.checkboxes, function(checkbox: ICheckbox){
  return (checkbox.label === internalNumber);
}); //gives me null, moreover, even a console.log inside the second find doesn't print. I'm thinking the two consecutive _.find statements are messing something up, not sure what.
作为参考,这是我的ICheckbox接口:

export interface ICheckbox {
    label: string;
    sublabel?: string;
    value: boolean;
    numberUuid: string;
}
我希望对于internalNumber 3419,它应该返回数组中的第二个对象。但它返回未定义的。我不知道这里发生了什么。 如果有更好的方法可以一次性找到并将值设置为true,我也很高兴知道这一点。 感谢您的帮助。多谢各位

更新:

在有人建议使用javascript的过滤方法之后,我尝试了以下方法:(我的范围分配给了这个)


在这里,我不明白为什么scope.memberCheckboxes.filter中的第一个console.log不打印?我是不是漏掉了什么明显的东西

由于某种原因,您的
成员更改。复选框
(或更新问题中的
成员。复选框
)没有任何元素


这是唯一的解释为什么它不工作,因为你的代码是正确的。
console.log('inside checkbox function')
不打印的事实证实了这一点。

number!==string?编辑了我的问题以反映这一点。你可能需要发布一个演示来重现这个问题,一切看起来都很好……我创建了一个具有类似值的JSFIDLE,也很好。这就是为什么我很困惑为什么这不起作用。为什么不使用array prototype中的filter函数,但当我使用console.log(memberToChange.checkbox)时,它会显示预期的内容。它不是空的。你是对的,这就是正在发生的事情。但是我看不出当它只是正确地打印值时,它是如何突然没有元素的。关于您使用u.find()的第一个建议,您是否在实际代码中的某个地方将
复选框指定给
memberToChange.checkbox
scope.selectedMembers.filter(function(member) {
    if (member.member.uuid === memberId) {
      scope.memberCheckboxes = [];
      console.log('found member'); //prints 
      scope.memberCheckboxes = member.checkboxes;
      console.log(scope.memberCheckboxes); // print correctly, with checkboxes of the member
      scope.memberCheckboxes.filter(function(checkbox) {
        console.log('inside checkbox function'); //control doesnt even come here
        if (checkbox.label === intNum) {
          console.log('found checkbox'); // control doesnt come here 
        }
      });
    }
  });