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";
    });

Po filtrze mogę się zdobyć

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

Ale potrzebuję wszystkich barów w kluczu 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'}]
1
user9883888 3 czerwiec 2018, 16:50

3 odpowiedzi

Najlepsza odpowiedź

Powinieneś użyć .includes() wewnątrz stanu filtra

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)

A jeśli chcesz, aby przeglądarka była zgodna (IE), możesz chcesz użyć .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)
2
Chiller 3 czerwiec 2018, 14:02

Użyj String#includes() lub String#indexOf()} zamiast sprawdzać równość. Konwertuj oba wartości do małych liter lub wielkich liter, jeśli chcą bezwrażliczny mecz

var allbars = myArray && myArray.filter(function( obj ) {
      return obj.foo.includes("bar");
});
0
charlietfl 3 czerwiec 2018, 13:53

Można to zrobić za pomocą regular expression RegExp#test.

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

var allbars = myArray && myArray.filter(function( obj ) {
      return pattern.test(obj.foo);
    });
0
RIYAJ KHAN 3 czerwiec 2018, 14:34