Tak więc mam obiekty, które chcę móc wyszukiwać dla dowolnych dopasowań wartości.
Na przykład:
let arr = [
{
a: "foo",
b: "bar"
},
{
a: "bar",
b: "baz"
},
{
a: "foo",
b: "baz"
}
];
i chcę mieć możliwość filtrowania tablicy tak, aby zawierał dowolny obiekt, który ma właściwość o wartości "foo".
Czy istnieje sposób na zrobienie tego z lodash? Coś jak:
_.filter(arr, function(obj) {
return obj.anyPropertiesMatch("bar");
});
Odpowiedzi:
2 dla odpowiedzi № 1Możesz użyć filtra Array # z Array # some:
const val = "foo";
const arr = [{"a":"foo","b":"bar"},{"a":"bar","b":"baz"},{"a":"foo","b":"baz"}];
const result = arr.filter((o) => Object.values(o).some((v) => v === val));
console.log(result);
Lub równoważne użycie lodasha _.includes()
:
const val = "foo";
const arr = [{"a":"foo","b":"bar"},{"a":"bar","b":"baz"},{"a":"foo","b":"baz"}];
const result = _.filter(arr, (o) => _.includes(o, val));
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
1 dla odpowiedzi nr 2
W lodash możesz użyć some
metoda sprawdzania, czy obiekt ma pole o podanej wartości:
let arr = [
{ a: "foo", b: "bar" },
{ a: "bar", b: "baz" },
{ a: "foo", b: "baz" }
];
let result = _.filter(arr, obj => _.some(obj, val => val === "foo"));
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
0 dla odpowiedzi № 3
Używanie LoDash _.filter
filtrować tablicę na podstawie wartości obiektu, zdobyć za pomocą _.values
i sprawdzane przy pomocy _.includes
let arr = [
{
a: "foo",
b: "bar"
},
{
a: "bar",
b: "baz"
},
{
a: "foo",
b: "baz"
}
];
let res = _.filter(arr, o => _.includes(_.values(o), "foo"));
console.log(res)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>
0 dla odpowiedzi nr 4
Jest to tak proste, jak to:
_.filter(arr, o=>_.includes(o,"foo"));
możesz użyć funkcji tablicy lodash do dowolnego obiektu bezpośrednio i rozważy on każdą wartość dla każdego elementu.
Oto przykład dla Ciebie:
let arr = [
{
a: "foo",
b: "bar"
},
{
a: "bar",
b: "baz"
},
{
a: "foo",
b: "baz"
}
];
let res = _.filter(arr, o=>_.includes(o,"foo"));
console.log(res)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>