tengo una pregunta. Estuve pensando mucho tiempo en ello, pero mal no encuentro respuesta. Conozco todos los métodos.
Mi pregunta es sobre esta sección de código:
var tr = order.every((i) => stock[i[0]] >= i[1]);Mis preguntas son:
stock es un Objeto. ¿Por qué debo escribir como una matriz?
¿Por qué está i[0] en stock y luego i[1] ?
¿Por qué este código verifica las matrices anidadas en orden constante?
const order = [ ["shirt", 5], ["shoes", 2] ]; const stock = { shirt: 50, height: 172, mass: 120, shoes: 6 }; var tr = order.every((i) => stock[i[0]] >= i[1]); /// return true console.log(`tr:`,tr)Entonces, los corchetes se pueden usar para acceder al elemento dentro de la matriz pasando su índice , por ejemplo:
const arr = ["first", "second"]; const secondElement = arr[1] // index 1 means seconds elementy también se pueden usar corchetes para acceder al elemento dentro del objeto pasando su clave , por ejemplo:
const obj = { first: 1, second: 2 }; const secondElement = object.second // Normal way to access value in object const secondElementWithAnotherSyntax = object['second'] // another syntax, same thinglo bueno de la otra sintaxis que se muestra es que puede pasarle variables, por ejemplo:
const objKey = 'second' const secondElement = obj[objKey] Ahora veamos su ejemplo, i es un elemento del order de la matriz, que lleva las matrices en sí, por lo i también es una de las dos matrices pequeñas, i[0] es la palabra de cadena al comienzo de las matrices pequeñas, entonces:
i[0] // is either 'shirt' or 'shoes' y dado que stocks es un objeto que tiene esas claves, puede acceder, por ejemplo, al valor 50 diciendo stocks['shirt'] o como en su caso, stock[i[0]] ;)
ahora tu segunda pregunta: ¿por qué debería ser >= i[1] ? porque el segundo artículo del order , también conocido como i[1] es la cantidad de artículos requeridos/pedidos, por lo que siempre debe ser menor que su stock, no puede comprar 5 camisas de un lugar que solo tiene 3 en stock :)
¿Puedo sugerir que intente usar una denominación más expresiva de las variables?
Se puede acceder a una propiedad de objeto a través de la notación de paréntesis, como en stock[orderedProductName] cuando se usa una variable - Accesores de propiedad
Se puede escribir una versión concisa pero más legible utilizando la asignación de desestructuración
const order = [ ["shirt", 5], ["shoes", 2] ]; const stock = { shirt: 50, height: 172, mass: 120, shoes: 6, }; // original version let inStock = order.every((i) => stock[i[0]] >= i[1]); /// return true // more verbose version // check if every item in array order satisfies the condition // let's cycle over the array calling the element we're working on // orderItem inStock = order.every( orderItem => { const orderedProductName = orderItem[0]; const orderedProductQuantity = orderItem[1]; // to access an object property we can use bracket notation const stockProductQuantity = stock[orderedProductName]; // the condition to check: do we have enough products in stock ? return stockProductQuantity >= orderedProductQuantity; }); // a concise variation could make use of destructuring assignment. // Here, when we take the order item array, we immediately assign // each of its elements to the appropriate variable // // orderItem[0] or first array element -> productName // orderItem[1] or second array element -> orderedQuantity inStock = order.every(([productName, orderedQuantity]) => stock[productName] >= orderedQuantity ); if(inStock) { console.log('pack and ship'); } else { console.log('need to restock'); }1. la acción es un Objeto. ¿Por qué debo escribir como una matriz?
Puede acceder a las propiedades de los objetos usando corchetes [] .
¿Porqué necesitamos esto?
Object.keys(data).forEach(function(key) { console.log('Key : ' + key + ', Value : ' + data[key]) }) const json = { "id":"1", "some key with spaces": "48593" }; console.log(json.some key with spaces); // obviously throws error console.log(json['some key with spaces']); // prints "48593"2. ¿Por qué está i[0] en stock y luego i[1]?
3. ¿Por qué este código verifica las matrices anidadas en orden constante?
El código pasa por los pedidos, cada pedido es una matriz, por lo que i[0] es el tipo de pedido e i[1] es la cantidad. el código comprueba si hay suficientes artículos en stock. Para verificar si hay suficientes camisas, harías:
console.log(stock["shirts"] >= 5 Eso es lo que hace el código en su ejemplo, solo pasa la clave ( "shirts" ) y la cantidad ( 5 ) dinámicamente.