Tengo una variedad de objetos como:
[{type: 'marker', name: 'somename', id: '123abc321', lat: 123.00, lng: 32.00, educationRegion: 'someregion', seDistrict: 'sometype', sector: 'somesector', selected: false, shownOnMap: true, listed: false}, {type: 'marker', name: 'somename', id: '123abc322', lat: 123.00, lng: 32.00, educationRegion: 'someregion', seDistrict: 'sometype', sector: 'somesector', selected: false, shownOnMap: true, listed: false}, {type: 'marker', name: 'somename', id: '123abc323', lat: 123.00, lng: 32.00, educationRegion: 'someregion', seDistrict: 'sometype', sector: 'somesector', selected: false, shownOnMap: true, listed: false}]El número máximo de objetos en la matriz es de alrededor de 7600
Estoy luchando por encontrar una forma rápida de cambiar la propiedad 'seleccionada' de verdadero a falso o viceversa de cada objeto cuya identificación se incluye en una matriz de valores de identificación como:
['123abc322', '123abc323']La matriz de valores de identificación del proveedor podría incluir TODAS las identificaciones de objetos y, a menudo, será ~2000 identificaciones.
Entonces, si el campo object.id está en la matriz proporcionada, quiero cambiar el object.selected a !object.selected
Cualquier ayuda sería apreciada.
Recomendaría convertir su matriz de ID en un Set . Luego, se trata de hacer una pasada sobre su matriz y, si el Set contiene la ID del elemento, alternar la propiedad selected .
Tenga en cuenta que este método modifica los objetos en la matriz. Si necesita no mutar la entrada, puede usar un map .
Mutando la entrada:
const arr = [{type: 'marker', name: 'somename', id: '123abc321', lat: 123.00, lng: 32.00, educationRegion: 'someregion', seDistrict: 'sometype', sector: 'somesector', selected: false, shownOnMap: true, listed: false}, {type: 'marker', name: 'somename', id: '123abc322', lat: 123.00, lng: 32.00, educationRegion: 'someregion', seDistrict: 'sometype', sector: 'somesector', selected: false, shownOnMap: true, listed: false}, {type: 'marker', name: 'somename', id: '123abc323', lat: 123.00, lng: 32.00, educationRegion: 'someregion', seDistrict: 'sometype', sector: 'somesector', selected: false, shownOnMap: true, listed: false}]; const ids = new Set(['123abc322', '123abc323']); arr.forEach(el => { if (ids.has(el.id)) { el.selected = !el.selected; } }); console.log(arr);Sin mutar la entrada:
const arr = [{type: 'marker', name: 'somename', id: '123abc321', lat: 123.00, lng: 32.00, educationRegion: 'someregion', seDistrict: 'sometype', sector: 'somesector', selected: false, shownOnMap: true, listed: false}, {type: 'marker', name: 'somename', id: '123abc322', lat: 123.00, lng: 32.00, educationRegion: 'someregion', seDistrict: 'sometype', sector: 'somesector', selected: false, shownOnMap: true, listed: false}, {type: 'marker', name: 'somename', id: '123abc323', lat: 123.00, lng: 32.00, educationRegion: 'someregion', seDistrict: 'sometype', sector: 'somesector', selected: false, shownOnMap: true, listed: false}]; const ids = new Set(['123abc322', '123abc323']); const newArr = arr.map(el => { if (!ids.has(el.id)) return el; return { ...el, selected: !el.selected } }); console.log(newArr);Puede hacer todo con una sola línea de código, aquí hay un ejemplo de código:
let array = [{ type: "marker", name: "somename", id: "123abc321", lat: 123.0, lng: 32.0, educationRegion: "someregion", seDistrict: "sometype", sector: "somesector", selected: false, shownOnMap: true, listed: false, }, { type: "marker", name: "somename", id: "123abc322", lat: 123.0, lng: 32.0, educationRegion: "someregion", seDistrict: "sometype", sector: "somesector", selected: false, shownOnMap: true, listed: false, }, { type: "marker", name: "somename", id: "123abc323", lat: 123.0, lng: 32.0, educationRegion: "someregion", seDistrict: "sometype", sector: "somesector", selected: false, shownOnMap: true, listed: false, }, ]; let ids = ['123abc322', '123abc323']; // .filter() create a new array with all elements that pass the test implemented by the provided function. // .map() run a function for everyone of the remaining objects and flip the "selected" value. array.filter(x => ids.includes(x.id)).map(x => x.selected = !x.selected); console.log(array);Espero que sea lo que buscas.