When I specify the value selectedZone from my AsyncStorage (The value is the same) it doesn't work and show yellow warnning.
Lodash имеет мало общего с этим - все сводится к тому, как JavaScript сравнивает объекты - два из них одинаковы, ТОЛЬКО если они буквально являются одним и тем же базовым объектом:
const a = {name: "fred"};
const b = a; //literally the same object
const c = {name: "fred"}; //an object that looks the same
console.log("a, b, c", a, b, c);
console.log("a === b", a === b);
console.log("a === c", a === c);
Два объекта с одинаковыми значениями , которые являются различными объектами , не считаются одинаковыми.По крайней мере, не в соответствии с indexOf
, поскольку он использует сравнение JavaScript:
const arr = [
{name: "alice"},
{name: "bob"},
{name: "carol"}
];
const originalObject = arr[1]; //literally the same object
const newObject = {name: "bob"}; //an object that looks the same
const indexWithOriginalObject = _.indexOf(arr, originalObject);
const indexWithNewObject = _.indexOf(arr, newObject);
console.log("index when using the original object:", indexWithOriginalObject);
console.log("index when using a new object that looks the same:", indexWithNewObject);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.11/lodash.min.js"></script>
Однако вы можете использовать метод Лодаша findIndex
, который будет правильно выполнять сравнение.
const arr = [
{name: "alice"},
{name: "bob"},
{name: "carol"}
];
const index = _.findIndex(arr, {name: "bob"});
console.log("index", index);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.11/lodash.min.js"></script>
Предупреждение: при вызове findIndex
только с объектом проверяются только те свойства, которые вы указали.Так что он может не найти нужный вам объект, если у вас есть более одного, которые выглядят одинаково.Вы можете использовать isEqual
в обратном вызове, если вы хотите проверить, что два объекта выглядят ТОЛЬКО одинаково
const arr = [
{name: "alice"},
{name: "bob", lastName: "bloggs"},
{name: "bob", lastName: "smith"},
{name: "carol"}
];
const indexPartial1 = _.findIndex(arr, {name: "bob"});
const indexPartial2 = _.findIndex(arr, {name: "bob", lastName: "smith"});
const indexEqual1 = _.findIndex(arr, x => _.isEqual(x, {name: "bob"}));
const indexEqual2 = _.findIndex(arr,x => _.isEqual(x, {name: "bob", lastName: "smith"}));
console.log(
"index by partial equality where the argument only has one property:",
indexPartial1
);
console.log(
"index by partial equality where the argument has both properties:",
indexPartial2
);
console.log(
"index by full equality where the argument only has one property:",
indexEqual1
);
console.log(
"index by full equality where the argument has both properties:",
indexEqual2
);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.11/lodash.min.js"></script>