Как отфильтровать на основе ключа из массива с помощью JavaScript? - PullRequest
0 голосов
/ 03 июня 2018
myArray = [{'id':'73','foo':'bar 22'},
           {'id':'45','foo':'bar'},
           {'id':'46','foo':'area'},
           {'id':'47','foo':'line'}]



var allbars = myArray && myArray.filter(function( obj ) {
      return obj.foo == "bar";
    });

После фильтрации я могу получить

 allbars = [{'id':'45','foo':'bar'}]

, но мне нужно, чтобы все клавиши существовали в клавише foo

 Expected output is(in the key foo i have bar, bar22 both are expecting in the output but i can able to get only bar)
    allbars = [{'id':'45','foo':'bar'}, {'id':'73','foo':'bar 22'}]

Ответы [ 3 ]

0 голосов
/ 03 июня 2018

Используйте String#includes() или String#indexOf() вместо проверки равенства.Преобразуйте оба значения в нижний или верхний регистр, если требуется регистронезависимое соответствие

var allbars = myArray && myArray.filter(function( obj ) {
      return obj.foo.includes("bar");
});
0 голосов
/ 03 июня 2018

Можно сделать это, используя regular expression RegExp#test.

const pattern = new RegExp('bar', 'i');

var allbars = myArray && myArray.filter(function( obj ) {
      return pattern.test(obj.foo);
    });
0 голосов
/ 03 июня 2018

Вы должны использовать .includes() внутри условия фильтра

myArray = [{'id':'73','foo':'bar 22'},
           {'id':'45','foo':'bar'},
           {'id':'46','foo':'area'},
           {'id':'47','foo':'line'}]

var allbars = myArray && myArray.filter(obj => obj.foo.includes("bar"));
    
console.log(allbars)

И если вы хотите сделать его совместимым с браузером (IE), вы можете использовать .indexOf()

myArray = [{'id':'73','foo':'bar 22'},
           {'id':'45','foo':'bar'},
           {'id':'46','foo':'area'},
           {'id':'47','foo':'line'}]
           
var allbars = myArray && myArray.filter(obj => obj.foo.indexOf("bar") > -1);
    
console.log(allbars)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...