I want to check if a value in array1 exists in an object in array2.
array1:
[2,5,1]
array2:
[
{ value: 1, name: 'Monday', isSelected: false },
{ value: 2, name: 'Tuesday', isSelected: false },
{ value: 3, name: 'Wednesday', isSelected: false },
{ value: 4, name: 'Thursday', isSelected: false },
{ value: 5, name: 'Friday', isSelected: false },
]
What I want to achieve is to check array1
against array2
property named value
. If the value of an object in array2
is included in array1
, the isSelected
property should be updated to true. I've tried:
this.setState(prevState => ({
...prevState,
array2: prevState.array2.map(el => {
if (el.value === array2) {
return {
...el,
isSelected: !el.isSelected
}
}
return el;
})
}))
Inside the .map
callback, always return, and set the isSelected
property to whether array1.includes(obj.value)
, where obj
is the object you're iterating over:
const array1 = [2, 5, 1]; const array2 = [{ value: 1, name: 'Monday', isSelected: false }, { value: 2, name: 'Tuesday', isSelected: false }, { value: 3, name: 'Wednesday', isSelected: false }, { value: 4, name: 'Thursday', isSelected: false }, { value: 5, name: 'Friday', isSelected: false }, ]; const output = array2.map(obj => ({ ...obj, isSelected: array1.includes(obj.value) })); console.log(output);
It's not entirely clear, but if isSelected
properties can start out as true
and you want to preserve them, despite the numbers not existing in the array1
, change to isSelected: obj.selected || array1.includes(obj.value)
isSelected: obj.selected || array1.includes(obj.value)
.
The best approach here is to check array2 against array1. Below is a working code snippet.
let values = [
{ value: 1, name: 'Monday', isSelected: false },
{ value: 2, name: 'Tuesday', isSelected: false },
{ value: 3, name: 'Wednesday', isSelected: false },
{ value: 4, name: 'Thursday', isSelected: false },
{ value: 5, name: 'Friday', isSelected: false },
]
const selectedValues = [2,5,1];
values = values.map((item) => {
if(selectedValues.indexOf(item.value) > -1) {
item.isSelected = true;
}
return item;
});
console.log(values);
And here is the link from jsbin: https://jsbin.com/nikabegobe/edit?js,console,output
You may also use some()
and includes()
const arr1 = [2,5,1];
const arr2 = [{ value: 1, name: 'Monday', isSelected: false }, { value: 2, name: 'Tuesday', isSelected: false }, { value: 3, name: 'Wednesday', isSelected: false },
{ value: 4, name: 'Thursday', isSelected: false }, { value: 5, name: 'Friday', isSelected: false },
];
let isSelected = arr2.some(obj => arr1.includes(obj.value));
console.log(isSelected)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.