4种方法

测试数据:

var list1 = [
    {
      name: "bbAhhhaia",
      other: "akka"
    },
    {
      name: "哈哈ad",
      other: "cai"
    },
    {
      name: "js",
      other: "aa"
    }
  ]
  fuzzyQuery(list1, "a");

1 indexOf

从头到尾地检索字符串 item.name,看它是否含有子串 keyWord。
如果找到一个 keyWord,则返回 keyWord 的第一次出现的位置。如果没有找到,将返回 -1。

/**
* @param  {Array}  list     进行查询的数组
* @param  {String} keyWord  查询的关键词
* @return {Array}  arr      查询的结果
*/
 function fuzzyQuery(list, keyWord) {
     var arr = list.filter(item => {
     	return item.name.indexOf(keyWord) >= 0
     });
     return arr
 }

2 split

通过 keyWord 将 item.name 分割成子串并返回子串数组。返回的数组中的字串不包括 item.name 自身。
如果 item.name 中不存在 keyWord,将返回一个只包含 item.name 的数组。
故可以根据返回数组的长度来判断是否存在子字符串 keyWord

function fuzzyQuery(list, keyWord) {
 	var arr = list.filter(item => {
		return item.name.split(keyWord).length > 1
	});
	return arr
 }

3 正则表达式test

function fuzzyQuery(list, keyWord) {
 	var arr = list.filter(item => {
       var reg = new RegExp(keyWord, "gi");
       return reg.test(item.name)
	});
	return arr
 }

4 正则表达式match

function fuzzyQuery(list, keyWord) {
	var arr = list.filter(item => {
		var reg = new RegExp(keyWord, "gi");
		return item.name.match(reg)
	});
	return arr
 }

总结

match性能最差, test功能会比较强大,代码也更加简洁。比如:忽略大小写