如何通过包含某些字符串的属性过滤JSON数据?

时间:2015-10-30 07:46:34

标签: javascript json angularjs

我有一个看起来像这样的JSON对象:

{
  'name': 'Bob',
  'friends': [
    {
      'name' : 'Ashley (Family)'
    },
    {
      'name' : 'Steven (Non-Family)'
    },
    {
      'name' : 'Chris (Family)'
    }
  ]
}

如何过滤以上内容,以便只返回家人朋友?即,姓名包含'(家庭)'?

的朋友
function filterFriends (friends) {

  return friends.filter(function(i) {
    if (i.name.indexOf('(Family)') > -1) {
      return i.name;
    }
  });

}

但上述情况似乎无效......我不知道自己是否走在正确的轨道上?

2 个答案:

答案 0 :(得分:0)

Filter方法应始终返回boolean值,这看起来总是返回名称为。

的字符串

查看.filter方法的文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

答案 1 :(得分:0)

除了 a)使用短语" JSON Object"没有任何意义,而且 b)依靠粗暴的自动投射布尔,你真的没有问题。这个"答案",经过一些小的技术改进,将证明您的代码很好。

var data = {
  name: 'Bob',
  friends: [
    {
      name: 'Ashley (Family)'
    },
    {
      name: 'Steven (Non-Family)'
    },
    {
      name: 'Chris (Family)'
    }
  ]
};

var family = data.friends.filter(f => f.name.indexOf('(Family)') > -1);

console.log(family);
// [{name: 'Ashley (Family)'}, {name: 'Chris (Family)'}]

如果要将其写入函数

function isFamily(name) {
  return name.indexOf('(Family)') > -1;
}

function getFamily(friends) {
  return friends.filter(f => isFamily(f.name));
}

var family = getFamily(data.friends);

<强> ES5

var family = data.friends.filter(function(f) {
  return f.name.indexOf('(Family)') > -1);
});

console.log(family);