Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript/angular中迭代特定索引和检查值_Javascript_Angularjs - Fatal编程技术网

如何在javascript/angular中迭代特定索引和检查值

如何在javascript/angular中迭代特定索引和检查值,javascript,angularjs,Javascript,Angularjs,我的angular应用程序中有以下型号: members = [ { id: 'member1', name: '', instrument1: '', instrument2: '' },... ] 我想生成一个过滤后的数组,可以通过ng repeat进行访问。筛选后的数组将包含值不等于“”或n

我的angular应用程序中有以下型号:

members = [
            {
                id: 'member1',
                name: '',
                instrument1: '',
                instrument2: ''
            },...
            ]

我想生成一个过滤后的数组,可以通过ng repeat进行访问。筛选后的数组将包含值不等于“”或null的所有工具的索引。实际上,数组的内容对于直接项并不重要,它可能只是[0,1,2…]

我建议您过滤成员并获取长度:

function hasAnInstrument(member) {
  // return true if you want to count the member, for instance:
  return !!member.instrument1 || !!member.instrument2;
}

var counter = members.filter(hasAnInstrument).length;

我建议您筛选成员并获取长度:

function hasAnInstrument(member) {
  // return true if you want to count the member, for instance:
  return !!member.instrument1 || !!member.instrument2;
}

var counter = members.filter(hasAnInstrument).length;

编辑的答案

var a = [
  {instrument1: true, instrument2: false},
  {instrument1: false, instrument2: false},
  {instrument1: true, instrument2: true}
];

var count = a.map(function(m) {
  return +!!m.instrument1 + +!!m.instrument2
}).reduce(function(a, b) {
  return a + b
}, 0);

console.log(count);
map
将每个元素转换为0、1或2,其中一个属性转换为布尔值,reduce只将各个计数器相加

注释

  • !!something
    something
    转换为布尔值
    +something
    something
    转换为数字,
    true
    转换为
    1
    false
    转换为
    0
    。很方便

  • 此代码依赖于这样一个事实:当转换为布尔值时,空字符串或
    null
    ,等于
    false
    。对于模型来说,这是一个非常薄弱的环节,在生产/企业环境中,我建议通过添加一个数据净化步骤来使这一点更加明确

  • 上面的代码非常简洁,几乎让人摸不着头脑。在生产/企业环境中,我建议将其放宽一点,使其更加明确


编辑答案

var a = [
  {instrument1: true, instrument2: false},
  {instrument1: false, instrument2: false},
  {instrument1: true, instrument2: true}
];

var count = a.map(function(m) {
  return +!!m.instrument1 + +!!m.instrument2
}).reduce(function(a, b) {
  return a + b
}, 0);

console.log(count);
map
将每个元素转换为0、1或2,其中一个属性转换为布尔值,reduce只将各个计数器相加

注释

  • !!something
    something
    转换为布尔值
    +something
    something
    转换为数字,
    true
    转换为
    1
    false
    转换为
    0
    。很方便

  • 此代码依赖于这样一个事实:当转换为布尔值时,空字符串或
    null
    ,等于
    false
    。对于模型来说,这是一个非常薄弱的环节,在生产/企业环境中,我建议通过添加一个数据净化步骤来使这一点更加明确

  • 上面的代码非常简洁,几乎让人摸不着头脑。在生产/企业环境中,我建议将其放宽一点,使其更加明确


参数是否为“成员”?您的方法如何迭代数组中的每个对象?函数是嵌套在for循环还是其他循环中?我喜欢你的方法的简单性——魔法是由过滤函数完成的。它为数组的每个元素调用传递的函数参数。它返回一个新数组,其中包含函数返回true的所有元素。请参阅文档:因此,最终我希望在ng repeat中实现hasAnInstrument(“hasAnInstrument()中的成员”),因此它需要返回一个类似[0,1,2,3,4]的数组……实际上,我想您可以省去它。长度和性能都很好。但是你的解决方案的结构会改变,对吗?members.filter(hasAnInstrument)会为你提供你想要的数组。结构没有改变。唯一需要的改变是所有仪器都返回真值,而不仅仅是成员……有没有一种方法可以通过返回来实现这一点?谢谢你的帮助!这个论点是“成员”吗?您的方法如何迭代数组中的每个对象?函数是嵌套在for循环还是其他循环中?我喜欢你的方法的简单性——魔法是由过滤函数完成的。它为数组的每个元素调用传递的函数参数。它返回一个新数组,其中包含函数返回true的所有元素。请参阅文档:因此,最终我希望在ng repeat中实现hasAnInstrument(“hasAnInstrument()中的成员”),因此它需要返回一个类似[0,1,2,3,4]的数组……实际上,我想您可以省去它。长度和性能都很好。但是你的解决方案的结构会改变,对吗?members.filter(hasAnInstrument)会为你提供你想要的数组。结构没有改变。唯一需要的改变是所有仪器都返回真值,而不仅仅是成员……有没有一种方法可以通过返回来实现这一点?谢谢你的帮助!这实际上非常接近,但我需要返回两个“true”的if!!member.1&!!成员2…即。我需要数一数我能跟上的所有仪器。我只是不知道如何把它放在我的控制器里。现在在我的模板中,我在getMembersWithInstruments(members)中有一个
ng repeat='member。我如何将您的解决方案包装到该函数中?谢谢,这是我第一次进入angular和js领域。我感谢你的时间和意愿来解释。这实际上非常接近,但我需要返回两个“真”的如果!!member.1&!!成员2…即。我需要数一数我能跟上的所有仪器。我只是不知道如何把它放在我的控制器里。现在在我的模板中,我在getMembersWithInstruments(members)
中有一个
ng repeat='member。我如何将您的解决方案包装到该函数中?谢谢,这是我第一次进入angular和js领域。感谢您花时间和意愿解释。您应该编辑您的答案,以提供更多信息和准确信息,以便获得可在
ng repeat
中使用的过滤元素数组。现在还不清楚您是要计算符合精确条件的项目,还是要将其放入单独的数组中……您应该编辑答案,以提供更多信息和精确信息,以便获得可在
ng repeat