Tengo una matriz y un objeto y me gustaría una función samePrice(arr,obj) como esta:
const arr = [0,1,2]; const obj = { 0: 10, 1: 10, 2: 10, 3: 12, }; // samePrice(arr,obj) => true const arr = [0,3]; const obj = { 0: 10, 1: 10, 2: 10, 3: 12, }; // samePrice(arr,obj) => falseAquí está mi función actual...
const samePrice = (arr,obj) => { let result = true; let it = obj[arr[0]]; arr.forEach(item => { if (obj[item] !== it){ result = false; } }) return result; }Estoy seguro de que hay una solución mejor.
Básicamente, lo que estás haciendo es verificar que every elemento sea igual que el primero:
const samePrice = (arr,obj) => arr.every(x => obj[x] == obj[arr[0]]) const arr = [0,1,2]; const obj = { 0: 10, 1: 10, 2: 10, 3: 12, }; console.log(samePrice(arr,obj)); // => true const arr2 = [0,3]; const obj2 = { 0: 10, 1: 10, 2: 10, 3: 12, }; console.log(samePrice(arr2,obj2)); // => falsePuede usar Array.every para probar si algo es cierto para todos los elementos de la matriz. Entonces obtenga el valor del objeto para el primer elemento de la matriz, luego pruebe si cada elemento es igual a eso.
function samePrice(items, prices) { if (items.length == 0) { return true; } let price = prices[items[0]]; return items.every(item => prices[item] == price); } const arr1 = [0, 1, 2]; const obj1 = { 0: 10, 1: 10, 2: 10, 3: 12, }; console.log(samePrice(arr1, obj1)); const arr2 = [0, 3]; const obj2 = { 0: 10, 1: 10, 2: 10, 3: 12, }; console.log(samePrice(arr2, obj2));Se me ocurrió esto:
function samePrice(arr, obj) { if(arr.length < 1) return false; i = 1; while(i < arr.length) { if(obj[arr[i]]!=obj[arr[i-1]]) return false; i++; }; return true; } var arr = [0,1,2]; var obj = { 0: 10, 1: 10, 2: 10, 3: 12, }; console.log(samePrice(arr, obj)); var arr = [0,3]; var obj = { 0: 10, 1: 10, 2: 10, 3: 12, }; console.log(samePrice(arr, obj));