Dados los siguientes dos objetos de matriz:
let origArr = [ { value: 2, label: 'Dog' }, { value: 4, label: 'Cat' }, { value: 16, label: 'Horse' } ] let newArr = [ { value: 2, label: 'Dog' }, { value: 3, label: 'Bird' }, { value: 0, label: 'Fish' } ] ¿Cuál sería la mejor manera de devolver una nueva matriz de solo el valor de la diferencia entre origArr y newArr , es decir, donde los elementos origArr no están en newArr ?
En el ejemplo anterior, busco una nueva matriz llamada diffArr = [4,16]
Tenga en cuenta : que todos los valores de value dentro de origArr y newArr son únicos
¿No está seguro si hay un medio ES2016 ?
Puede usar el filter y some para hacer el trabajo.
let origArr = [ { value: 2, label: 'Dog' }, { value: 4, label: 'Cat' }, { value: 16, label: 'Horse' } ] let newArr = [ { value: 2, label: 'Dog' }, { value: 3, label: 'Bird' }, { value: 0, label: 'Fish' } ] const res = origArr.filter(x => !newArr.some(y => y.value === x.value)); console.log(res); // assuming you want the entire filtered objects const justValues = res.map(x => x.value); // if you want just the filtered values console.log(justValues)algunos: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some
filtro: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
Puede obtener todos los valores únicos de newArr usando Set y array#map y luego filtrar el valor que no existe en el conjunto y obtener todos los valores.
const origArr = [ { value: 2, label: 'Dog' }, { value: 4, label: 'Cat' }, { value: 16, label: 'Horse' } ], newArr = [ { value: 2, label: 'Dog' }, { value: 3, label: 'Bird' }, { value: 0, label: 'Fish' } ], unique = new Set(newArr.map(o => o.value)), difference = origArr .filter(({value}) => !unique.has(value)) .map(o => o.value); console.log(difference);